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

58 lines
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 请求处理管道中的一部分,它们协同工作,提供了一种灵活和模块化的方式来构建和管理应用程序的请求-响应周期。