导入库时如何更改NestJS Decorator字符串参数

问题描述

我有一个nestJs monorepo,其中包含一些应用程序(微服务)和库。 我在所有应用程序中都有一个Service类,因此我想将其提取一个lib中。

我认为这是个好主意,但后来我意识到,我在此类的方法上有一个装饰器,每个应用程序都需要一个不同的const字符串。 似乎我无法实现...有什么办法吗? 基本上,我需要将加载应用程序中的const字符串“注入”到lib中,以供装饰器使用。

更具体地说,装饰器是@RabbitSubscribe()(来自golevelup/nestjs-rabbitmq),每个模块的队列名称(装饰器的常量字符串参数)必须不同。

但更笼统地说,如果我在lib中有此类:

@Injectable()
export class MyService {
  @ADecorator({
    param: 'this is the string',})
  myFunction() { ... }
}

如何将其导入不同的应用程序中,每个应用程序具有不同的字符串参数?

解决方法

免责声明:我是@golevelup/nestjs-rabbitmq.

的作者

只有在引导用于NestJS的DI系统后,才能实例化NestJS的官方配置模块。因此,不可能使用此模块动态配置装饰器。

为解决此问题(以及其他一些问题,包括更好的type saftey),我构建了alternative configuration package并与ENV和.env文件配合使用,以帮助您配置应用。使用此软件包,可以在 NestJS DI之前引导您的应用程序配置,并且包括装饰程序在内的所有文件都将被导入,因此您可以编写如下代码:

@Injectable()
export class MyService {
  @ADecorator({
    param: config.queueName,})
  myFunction() { ... }
}

在每个应用实例中,根据ENV值分别检索config.queueName的位置或从.env或.json文件加载的位置