AOP
AOP(面向切面编程)是一种编程范式,它允许开发者将横切关注点(cross-cutting concerns)从业务逻辑中分离出来。
好处是可以把一些通用逻辑分离到切面中,保持业务逻辑的纯粹性,这样切面逻辑可以复用,还可以动态的增删。
横切关注点是那些影响多个模块的问题,例如日志记录、事务管理、安全性等。
在 Nest.js 中,AOP 主要是通过以下几种方式:
- 中间件(MiddleWare)
- 守卫(Guards)
- 拦截器(Interceptors)
- 自定义装饰器(Custom Decorators)
- 管道(Pipes)
Nest 中几种 AOP 方式的执行顺序
请求首先通过中间件,然后可能会被守卫拦截,如果通过了守卫,请求会被拦截器和管道处理,然后执行方法本身。如果方法执行过程中抛出异常,异常过滤器会介入处理。响应时,拦截器会再次执行,用于后处理响应数据。
请求是先全局,例如中间件,请求先经过全局中间件,再到模块中间件,响应则是后全局。
当有多个拦截器应用于一个路由时,它们的执行顺序将按照它们在代码中的声明顺序依次执行。
例如,假设有三个拦截器:拦截器A、拦截器B 和 拦截器C:
- 当请求到达目标处理程序之前,首先会执行拦截器A 的逻辑,然后是拦截器B 的逻辑,最后是拦截器C 的逻辑。
- 类似地,在响应返回之前,拦截器C 的逻辑会先执行,然后是拦截器B 的逻辑,最后是拦截器A 的逻辑。
Loading...