Skip to content

请求生命周期

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

NestJS 请求生命周期

该顺序用于决定横切逻辑的放置位置;业务规则仍应位于 Service 中,而不是依赖生命周期组件的执行先后。

组件职责

组件进入业务逻辑前进入业务逻辑后适合解决的问题
Middleware请求 ID、底层 HTTP 预处理、访问日志。
Guard认证、授权、资源访问策略。
Interceptor耗时、追踪、缓存、成功响应转换。
Pipe参数转换和输入格式校验。
Exception Filter异常时异常日志和错误响应。

作用域

Middleware 按模块和路由配置;Guard、Interceptor、Pipe、Exception Filter 可注册到全局、Controller 或路由方法。全局组件覆盖面最大,应只处理所有端点都需要的能力;业务特有规则放在 Controller 或方法作用域。

通过 app.useGlobal*()main.ts 注册的全局组件位于模块依赖注入容器之外,不能注入 Provider。需要依赖日志、配置或数据库 Provider 时,使用 APP_GUARDAPP_INTERCEPTORAPP_PIPEAPP_FILTER 等 Provider token 在模块中注册。

选择原则

  • 需要读写底层 reqres 并在路由匹配前执行:Middleware。
  • 需要读取路由元数据或当前用户并决定是否放行:Guard。
  • 需要包裹一次调用、处理成功响应或统计耗时:Interceptor。
  • 需要将外部输入转为受信任的参数或 DTO:Pipe。
  • 需要处理已经抛出的异常:Exception Filter。

参考

基于 MIT 许可发布