AOP

AOP(面向切面编程)是一种编程范式,它允许开发者将横切关注点(cross-cutting concerns)从业务逻辑中分离出来。
好处是可以把一些通用逻辑分离到切面中,保持业务逻辑的纯粹性,这样切面逻辑可以复用,还可以动态的增删。
横切关注点是那些影响多个模块的问题,例如日志记录、事务管理、安全性等。
在 Nest.js 中,AOP 主要是通过以下几种方式:
  • 中间件(MiddleWare)
  • 守卫(Guards)
  • 拦截器(Interceptors)
  • 自定义装饰器(Custom Decorators)
  • 管道(Pipes)

Nest 中几种 AOP 方式的执行顺序

notion image
请求首先通过中间件,然后可能会被守卫拦截,如果通过了守卫,请求会被拦截器和管道处理,然后执行方法本身。如果方法执行过程中抛出异常,异常过滤器会介入处理。响应时,拦截器会再次执行,用于后处理响应数据。
请求是先全局,例如中间件,请求先经过全局中间件,再到模块中间件,响应则是后全局。
当有多个拦截器应用于一个路由时,它们的执行顺序将按照它们在代码中的声明顺序依次执行。
例如,假设有三个拦截器:拦截器A、拦截器B 和 拦截器C:
  • 当请求到达目标处理程序之前,首先会执行拦截器A 的逻辑,然后是拦截器B 的逻辑,最后是拦截器C 的逻辑。
  • 类似地,在响应返回之前,拦截器C 的逻辑会先执行,然后是拦截器B 的逻辑,最后是拦截器A 的逻辑。
Loading...
目录
文章列表
王小扬博客
产品
Think
Git
软件开发
计算机网络
CI
DB
设计
缓存
Docker
Node
操作系统
Java
大前端
Nestjs
其他
PHP