You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
pac-auth/docs/生命周期.md

2.4 KiB

在 NestJS 应用中,拦截器(Interceptors)、中间件(Middlewares)、过滤器(Filters)、管道(Pipes)、守卫(Guards)和控制器(Controllers)都是构成应用程序请求-响应周期的不同组件,每个组件都有其特定的用途和执行时机。下面是它们各自的作用和区别:

  1. 控制器(Controllers)

    • 作用:处理 HTTP 请求并返回响应。控制器定义了应用程序的 API 端点。
    • 执行时机:请求被路由到特定的控制器方法时。
  2. 中间件(Middlewares)

    • 作用:在请求处理管道的任何阶段执行自定义代码,可以处理请求体、修改请求头、结束请求或将请求传递给下一个中间件。
    • 执行时机:请求进入 NestJS 应用后,控制器之前。
  3. 守卫(Guards)

    • 作用:保护路由或端点,可以基于权限、角色或其他条件允许或拒绝请求。
    • 执行时机:请求通过中间件后,管道中的下一个拦截器、过滤器或管道之前。
  4. 过滤器(Filters)

    • 作用:处理请求过程中发生的错误。可以捕获异常或处理应用程序错误。
    • 执行时机:请求通过守卫后,如果发生错误,响应通过管道之前。
  5. 管道(Pipes)

    • 作用:用于数据验证和转换,可以应用于路由处理程序的参数、返回值或 HTTP 客户端。
    • 执行时机:请求通过守卫后,控制器方法之前。
  6. 拦截器(Interceptors)

    • 作用:拦截请求或响应,可以改变请求数据、响应数据或执行附加操作。
    • 执行时机:请求通过管道后,控制器方法之后,响应通过管道之前。
  7. 守卫(Guards)(再次提及,以强调其在请求处理流程中的位置):

    • 作用:守卫通常用于权限控制,确保只有符合条件的请求能够到达控制器。
    • 执行时机:在过滤器之前,管道之后。

这些组件按照请求处理的顺序排列如下:

请求进入应用
  |
  v
中间件
  |
  v
守卫
  |
  v
管道
  |
  v
控制器
  |
  v
拦截器
  |
  v
过滤器(处理错误)
  |
  v
响应返回给客户端

每个组件都是 NestJS 请求处理管道中的一部分,它们协同工作,提供了一种灵活和模块化的方式来构建和管理应用程序的请求-响应周期。