module - 你能在条件下导入一个 NestJS 模块吗

标签 module rabbitmq nestjs

我正在 NestJS 中创建一个微服务。现在我想使用 RabbitMQ 将消息发送到另一个服务。
我的问题是:是否可以基于 .env 导入 RabbitmqModule多变的?如:USE_BROKER=false .如果这个变量是假的,那么不导入模块?
RabbitMQ 是在下面的 GraphQLModule 中导入的。

@Module({
  imports: [
    GraphQLFederationModule.forRoot({
      autoSchemaFile: true,
      context: ({ req }) => ({ req }),
    }),
    DatabaseModule,
    AuthModule,
    RabbitmqModule,
  ],
  providers: [UserResolver, FamilyResolver, AuthResolver],
})
export class GraphQLModule {}
RabbitMQ模块:
import { Global, Module } from '@nestjs/common';
import { ConfigService } from '@nestjs/config';
import { RabbitMQModule } from '@golevelup/nestjs-rabbitmq';
import { UserProducer } from './producers/user.producer';

@Global()
@Module({
  imports: [
    RabbitMQModule.forRootAsync(RabbitMQModule, {
      useFactory: async (config: ConfigService) => ({
        exchanges: [
          {
            name: config.get('rabbitMQ.exchange'),
            type: config.get('rabbitMQ.exchangeType'),
          },
        ],
        uri: config.get('rabbitMQ.url'),
        connectionInitOptions: { wait: false },
      }),
      inject: [ConfigService],
    }),
  ],
  providers: [UserProducer],
  exports: [UserProducer],
})
export class RabbitmqModule {}

最佳答案

我认为推荐的方法是使用 NestJS 的 DynamicModule 功能。
解释在这里:https://docs.nestjs.com/fundamentals/dynamic-modules
只需在 register 函数中检查您的环境变量并返回您的 Module 对象。
就像是:

@Module({})
export class GraphQLModule {
  static register(): DynamicModule {
    const imports = [
      GraphQLFederationModule.forRoot({
        autoSchemaFile: true,
        context: ({ req }) => ({ req }),
      }),
      DatabaseModule,
      AuthModule]
    if (process.env.USE_BROKER) {
      modules.push(RabbitmqModule)
    }
    return {
      imports,
      providers: [UserResolver, FamilyResolver, AuthResolver],
    };
  }
}

关于module - 你能在条件下导入一个 NestJS 模块吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65355892/

相关文章:

python - Python 是否导入模块路径中的所有模块?

python - 使用rabbitmq和twisted

python - 在celery.py中导入Django App函数

socket.io - 如何将 socket.io 与 graphql 订阅一起使用?

node.js - 调试 TypeScript VS Code 时的未绑定(bind)断点

nestjs - 有没有一种方法可以使用 Group By 和 Count with Type Orm Repository

javascript - JS 导入模块并在页面加载时运行

windows - 永久添加 PowerShell 模块? (导入模块)

javascript - 有没有类似 Ruby 的 JavaScript 模块

python - Celeryd 运行多个守护进程