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

How to change NestJS Decorator string parameter when importing library

我有一个带有一些应用程序(微服务)和库的 NestJs monorepo。 我有一个服务 class,我在我的所有应用程序中都使用它,所以我想将它提取到一个库中。

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

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

但更一般地说,如果我在库中有这个 class:

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

如何在不同的应用程序中导入它,每个应用程序使用不同的字符串参数?

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

的作者

NestJS 的官方配置模块只能在 NestJS 的 DI 系统被 bootstrapped 后实例化。因此,无法使用此模块动态配置装饰器。

为了解决这个问题(以及其他一些问题,包括更好的类型安全),我构建了一个 alternative configuration package,它与 ENV 和 .env 文件一起使用,以帮助您配置您的应用程序。使用这个包可以 bootstrap 你的应用程序配置 之前 NestJS DI 和任何文件包括 Decorators 都被导入所以你可以写这样的代码:

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

其中 config.queueName 可以根据 ENV 值在每个应用程序实例中以不同方式检索或从 .env 或 .json 文件加载