alioth/before/pac-auth/docs/生命周期.md
2025-05-30 09:18:01 +08:00

59 lines
2.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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