spring的技术笔记
学习Nest核心第 10 / 23 篇1 分钟阅读

模块、控制器、服务

模块、控制器、服务

这节要解决什么

能在主项目里指认:哪个是 Module、哪个是 Controller、哪个是 Service,并知道请求怎么流过它们。

先用大白话(Vue 对照)

想象一个「书签」功能:

浏览器 GET /bookmarks
    → Controller(接待员:只负责认路由、拿参数)
        → Service(厨子:查数据库、做判断)
            → 返回数据
    → Controller 把结果写成 HTTP 响应
  • Controller:别写复杂业务,薄薄一层
  • Service:可以注入到 Controller 里用(Nest 帮你创建实例,这叫依赖注入;先会用即可)
  • Module:把上面这些「零件」登记在一起,并决定导出给谁用

AppModule 像应用根模块,再 import 各个功能模块(AuthModule、BookmarksModule…)。

对着项目看

在 03-nest-bookmark-api 里重点看:

src/
  app.module.ts              ← 根模块,组装全家桶
  bookmarks/
    bookmarks.module.ts
    bookmarks.controller.ts  ← @Controller('bookmarks')
    bookmarks.service.ts     ← 真正 CRUD
  auth/
    ...
  users/
    ...

常见装饰器(先认脸):

装饰器意思
@Module({...})声明模块
@Controller('bookmarks')路径前缀 /bookmarks
@Get() @Post() @Patch() @Delete()HTTP 方法
@Injectable()这是可注入的服务
@Body() @Param() @Query()取请求数据

请求流水(记住这张图)

HTTP 请求
  → (可选 Guard 鉴权)
  → (Pipe 校验 DTO)
  → Controller 方法
  → Service 方法
  → 数据库等
  → 返回

验收清单

  • 能在目录里指出书签的 controller / service / module
  • 知道业务代码优先写在 Service,而不是 Controller
  • 能说出一次 GET 请求大致经过哪些层

下一节 → 03-DTO校验与管道.md