【问题标题】:Is there a way to get function decorator metadata by nest provider?有没有办法通过嵌套提供者获取函数装饰器元数据?
【发布时间】:2021-12-13 03:34:43
【问题描述】:

我一直在编写一个 nestjs 模块来监视我在 rabbitmq 上的队列和交换,目前要实现库功能,你必须在 RankMyRabbitmqModule 中注册你的交换,然后在你的 Watch 装饰器中匹配它,如下例所示:

模块:

RankMyRabbitmqModule.forRootAsync({
      urls: ['amqp://guest:guest@localhost:5672'],
      exchanges: [
        {
          name: 'ex01',
          type: 'direct',
        },
        {
          name: 'ex02',
          type: 'direct',
        },
      ],
    }),

手表装饰器:

@Watch({
    queue: 'q1',
    exchange: 'ex01',
    routingKey: 'blue',
  })
  blue(msg) {
    console.log('[BLUE]:', msg);
  }

它只会监视我的队列并使用参数设置函数来执行里面的东西,但我正在考虑一种改进这个库的方法,我想要一个这样的结构

@Exchange('ex01')
@Injectable()
export class Exchange01 {
  @ExchangeRoute({
    routingKey: 'blue',
    queue: 'q1'
  })
  blue(msg) {
    console.log(msg)
  }

  @ExchangeRoute({
    routingKey: 'red',
    queue: 'q1'
  })
  red(msg) {
    console.log(msg)
  }
}

为此,我必须先获取提供者元数据,然后还要获取其方法元数据...有没有办法以这种方式获取元数据?这是我目前仅获取装饰器元数据的实现


@Module({})
class MyModule implements OnModuleInit{
  async OnModuleInit() {
    const discoveryMethods = await params.discovery.providerMethodsWithMetaAtKey(META_KEY);

  //TODO
  //Get Provider By MetaKey
  //Get Providers methods metadata
  }

}

Obs:我正在使用一个名为 @golevelup/nestjs-discovery 的库来获取方法元数据。

如果有办法通过元数据获取我的提供者,然后获取我的提供者方法元数据,这将对我实现这个新功能有很大帮助,有人可以帮助我吗?

【问题讨论】:

    标签: typescript rabbitmq nestjs decorator


    【解决方案1】:

    我找到了使用同一个库的方法,现在我可以使用下面的这些方法获取方法元数据

    const discoveredClasses = await this.discovery.providersWithMetaAtKey(
          decoratorKey,
        );
    
        for (const { discoveredClass, meta } of discoveredClasses) {
          const queueMeta = this.discovery.classMethodsWithMetaAtKey(
            discoveredClass,
            QUEUE_KEY,
          );
    
          console.log(queueMeta);
        }
    
    • 第一个是 discovery.providersWithMetaAtKey 它将为我提供所有提供者以及我的目标元密钥

    • 第二个是discovery.classMethodsWithMetaAtKey,它会根据库@golevelup/nestjs-discovery 提供的一种对象类型“discoveredClass”为我提供方法元数据

    【讨论】:

      猜你喜欢
      • 2012-05-11
      • 2019-06-16
      • 2012-02-29
      • 2022-08-19
      • 2020-06-08
      • 2020-02-24
      • 1970-01-01
      • 2020-09-09
      • 1970-01-01
      相关资源
      最近更新 更多