nestJs中 Guards ,Interceptors ,Pipes ,Controller ,Filters的执行顺序
执行顺序:
-
Guards(守卫):
Guards 是最先执行的中间件,用于确定是否允许请求继续处理。Guards 在请求被路由到控制器之前执行,通常用于身份验证、角色检查或权限验证。如果 Guards 返回一个布尔值false
或者抛出一个异常,请求处理流程将终止,不会执行后续的 Pipes、Interceptors 或控制器方法。 -
Interceptors(拦截器):
如果 Guards 允许请求继续,那么 Interceptors 会在 Pipes 和控制器方法之前执行。Interceptors 用于在请求被处理之前或响应返回给客户端之前执行一些逻辑,比如记录日志、转换数据格式或添加额外的元数据。 -
Pipes(管道):
Pipes 主要用于转换或验证请求体或请求参数。它们在 Interceptors 之后、控制器方法之前执行。Pipes 可以应用于控制器方法的参数,以在方法执行之前对数据进行处理。如果 Pipes 在处理数据时遇到错误,它们通常会抛出异常,这些异常随后会被 Filters 捕获处理。 -
Controller Method(控制器方法):
如果请求通过了 Guards 的检查,并且 Pipes 和 Interceptors 也正常执行,那么请求最终会被路由到相应的控制器方法。在控制器方法中,你可以执行业务逻辑并返回响应。 -
Filters(过滤器):
Filters 用于捕获和处理在请求处理流程中抛出的异常。它们在整个请求处理流程中都可以起作用,包括 Guards、Pipes、Interceptors 和控制器方法中抛出的异常。Filters 允许你以统一的方式处理错误,返回适当的响应给客户端。