nestjs中AOP的实现

nestjs中面向切面编程分为以下几个部分:中间件、Guard、Interceptor、Pipe、Filter


一、按照使用方式来分类:

1中间件:在模块的configure方法中进行配置,其配置是以代码形式进行的,当所有模块扫描完、组件创建之后,在NestApplication的setupModules方法中进行设置

2Guard、Interceptor、Pipe、Filter:使用装饰器在路由类、路由方法、路由方法参数上设置


二、按照实例获取方式来分类

1中间件:由于中间件类只出现在configure方法中,所以在之前扫描模块时并不知道这个类,只有当设置中间件时才会获取其实例,使用方法为:

@nestjs/core/injector/injector.ts
//加载中间件实例
  public async loadInstanceOfMiddleware(
    wrapper: MiddlewareWrapper,
    collection: Map,
    module: Module) {
    //中间件类型
    const { metatype } = wrapper;
    //中间件包装器
    const currentMetatype = collection.get(metatype.name);
    //如果包装器中已经有实例,直接返回
    if (currentMetatype.instance !== null) return;
    //如果实例不存在,解析构造函数参数,最后使用参数实例创建中间件实例,说明中间件也可以依赖注入
    await this.resolveConstructorParams(wrapper as any, module, null, null, (instances) => {
      collection.set(metatype.name, {
        ins

你可能感兴趣的:(#,nest.js)