本文档详细解释了 NestJS 如何通过其管道架构处理传入的请求。请求处理管道定义了从请求到达直到响应发送回客户端的事件序列。理解此管道对于在请求处理的各个阶段实现自定义逻辑至关重要,例如验证、转换、授权和错误处理。
有关异常处理的更多信息,请参阅 异常处理。
NestJS 请求处理管道由按特定顺序执行的多个组件组成
来源
中间件在路由处理程序之前执行。它用于发生在每个请求或基于路径匹配规则的请求组中的常见任务。
在 NestJS 中,中间件可以是
NestMiddleware 接口)中间件执行遵循基于模块距离的拓扑顺序,全局中间件最先执行,最近模块中间件最后执行。
来源
守卫决定是否处理或拒绝请求。它们主要用于授权目的。
守卫实现 CanActivate 接口并返回一个布尔值,指示请求是否应该继续。它们可以访问执行上下文,这允许它们检查请求和正在访问的路由。
来源
拦截器在路由处理程序之前和之后执行。“之前”阶段发生在守卫执行之后、管道执行之前。
拦截器可以
来源
管道在路由处理程序处理之前转换或验证输入数据。
管道处理传递给路由处理程序的参数。它们作用于传递给处理程序方法的参数,就在调用处理程序之前。
来源
路由处理程序是控制器中处理请求并返回响应的方法。
处理程序接收来自管道阶段的已处理和已验证的参数,并执行业务逻辑。它可以返回不同类型的响应
来源
在路由处理程序返回结果后,“之后”阶段的拦截器执行。
拦截器在“之后”阶段按反向顺序执行。这允许进行响应的嵌套处理,其中第一个看到请求的拦截器是最后一个看到响应的。
来源
异常过滤器处理在请求处理管道的任何阶段抛出的异常。
当发生异常时,NestJS 会查找与抛出的异常类型匹配的异常过滤器。过滤器可以绑定到
来源
在通过所有管道阶段后,NestJS 会在将响应发送给客户端之前处理它。
RouterResponseController 处理各种类型的响应
来源
请求处理管道依赖于执行上下文在各个阶段之间传递信息。
当请求到达时,NestJS
来源
路由处理程序的核心执行流程由 RouterExecutionContext 类管理。
RouterExecutionContext 中的 create() 方法通过以下方式准备执行过程
来源
NestJS 通过适配器抽象底层 HTTP 平台(Express/Fastify)。
管道使用抽象适配器来
来源
虽然本文档主要关注 HTTP 请求,但 NestJS 也使用类似的管道来处理其他类型的请求
来源
来源
控制器及其方法构成了请求管道的骨干。装饰器会按以下方式影响管道
来源
对于微服务,消息模式定义了消息的路由方式
来源
以下是一个请求通过管道的详细示例,其中包含所有组件
来源
NestJS 请求处理管道通过一系列明确定义的阶段,提供了一种结构化的请求处理方法。每个阶段都有特定的用途
理解此管道使开发人员能够
这种架构创建了一个灵活、模块化的系统来处理请求,同时保持了清晰的关注点分离。
刷新此 Wiki
最后索引时间2025 年 4 月 18 日(86eb46)