模块、控制器、服务
这节要解决什么
能在主项目里指认:哪个是 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