主题
请求生命周期
HTTP 请求通常按以下顺序处理:Middleware → Guard → Interceptor(前)→ Pipe → Controller → Service → Interceptor(后)。发生异常时,Exception Filter 负责将错误转换为 HTTP 响应。

该顺序用于决定横切逻辑的放置位置;业务规则仍应位于 Service 中,而不是依赖生命周期组件的执行先后。
组件职责
| 组件 | 进入业务逻辑前 | 进入业务逻辑后 | 适合解决的问题 |
|---|---|---|---|
| Middleware | 是 | 否 | 请求 ID、底层 HTTP 预处理、访问日志。 |
| Guard | 是 | 否 | 认证、授权、资源访问策略。 |
| Interceptor | 是 | 是 | 耗时、追踪、缓存、成功响应转换。 |
| Pipe | 是 | 否 | 参数转换和输入格式校验。 |
| Exception Filter | 否 | 异常时 | 异常日志和错误响应。 |
作用域
Middleware 按模块和路由配置;Guard、Interceptor、Pipe、Exception Filter 可注册到全局、Controller 或路由方法。全局组件覆盖面最大,应只处理所有端点都需要的能力;业务特有规则放在 Controller 或方法作用域。
通过 app.useGlobal*() 在 main.ts 注册的全局组件位于模块依赖注入容器之外,不能注入 Provider。需要依赖日志、配置或数据库 Provider 时,使用 APP_GUARD、APP_INTERCEPTOR、APP_PIPE、APP_FILTER 等 Provider token 在模块中注册。
选择原则
- 需要读写底层
req、res并在路由匹配前执行:Middleware。 - 需要读取路由元数据或当前用户并决定是否放行:Guard。
- 需要包裹一次调用、处理成功响应或统计耗时:Interceptor。
- 需要将外部输入转为受信任的参数或 DTO:Pipe。
- 需要处理已经抛出的异常:Exception Filter。
