redis 在NestJS中使用configService动态更改模块寄存器名称和装饰器参数

x33g5p2x  于 2023-04-19  发布在  Redis
关注(0)|答案(1)|浏览(129)

框架:NestJS
我目前通过与redis通信来管理队列。
我使用configService作为cross-env。
下面是AppModule、AudioModule和AudioService的代码。

< AppModule.ts >

@Module({
  imports: [
    ConfigModule.forRoot({
      isGlobal: true,
      envFilePath: `.env.${process.env.NODE_ENV}`,
    }),
    BullModule.forRootAsync({
      useFactory: () => ({
        redis: {
          host: "localhost",
          port: 6379,
        },
      }),
    }),
    AudioModule,
  ],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}



< AudioModule.ts >

@Module({
  imports: [
    BullModule.registerQueueAsync({
      name: "audio",
      useFactory: async (configService: ConfigService) => ({
        name: configService.get<string>('QUEUE_NAME', 'audio-test')
      }),
      inject: [ConfigService]
    }),
  ],
  controllers: [AudioController],
  providers: [AudioService],
})
export class AudioModule {}


< AudioService.ts >

@Injectable()
export class AudioService {
  constructor(@InjectQueue("audio") private audioQueue: Queue) {}

  async getJobById(jobId: JobId) {
    return await this.audioQueue.getJob(jobId);
  }
}

我希望使用configService根据开发、测试和生产环境动态更改队列名称。
谢谢。

yruzcnhs

yruzcnhs1#

将ConfigService注入AudioModule,并使用它来获取QUEUE_NAME环境变量的值。

import { Module } from '@nestjs/common';
import { BullModule } from '@nestjs/bull';
import { ConfigModule, ConfigService } from '@nestjs/config';

@Module({
  imports: [
    ConfigModule,
    BullModule.registerQueueAsync({
      name: 'audio',
      useFactory: async (configService: ConfigService) => ({
        name: configService.get<string>('QUEUE_NAME', 'audio-test'),
      }),
      inject: [ConfigService],
    }),
  ],
  controllers: [AudioController],
  providers: [AudioService],
})
export class AudioModule {}

可以在每个环境(dev、test、prod)的.env文件中设置QUEUE_NAME环境变量

QUEUE_NAME=audio-dev

相关问题