1

我想使用环境功能标志禁用模块(或所有端点和导出的服务)。我有一个如下所示的配置文件:

{ "featureFlags": { "books": true, "cars": false } }

在我的 app.module.ts 中,我有以下代码。

@Module({
  imports: [
    ConfigModule.forRoot({ load: [config] }),
    BooksModule,
    CarsModule,
  ],
  controllers: [],
  providers: [],
})
export class AppModule {}

像这样的事情是我想做的。这可能吗?

@Module({})
export class CarsModule {
  static forAsync(configService: ConfigService): DynamicModule {
    const controllers = []
    const providers = []
    const exports = []
    if (configService.get("config").featureFlags.cars) {
      controllers.push(...)
      exports.push(...)
      providers.push(...)
    }
    return {
      module: CarsModule,
      controllers,
      providers,
      exports,
    };
  }
}

4

1 回答 1

1

依赖注入在 Nest 动态模块中不可用。如果您想在 Nest 的 IoC 容器之外使用配置,可以尝试使用nest-typed-config

const featureFlagsConfig = selectConfig(ConfigModule, FeatureFlagsConfig);

@Module({})
export class CarsModule {
  static forAsync(): DynamicModule {
    const controllers = []
    const providers = []
    const exports = []
    if (featureFlagsConfig.cars) {
      controllers.push(...)
      exports.push(...)
      providers.push(...)
    }
    return {
      module: CarsModule,
      controllers,
      providers,
      exports,
    };
  }
}

于 2021-10-18T09:13:12.850 回答