问题描述
我有一个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文件加载的位置