我正在尝试为我的 nx monorepo 中的每个 Nestjs 应用程序创建自定义配置服务。 到目前为止,这是我想出的解决方案。
每个自定义配置服务将注入默认的nest configService,向nestjs configService传递一个泛型以指示该应用程序的配置列表。并将每个配置变量的检索包装在 getter 方法中。 此类服务的示例如下所示:
@Injectable()
export class AppConfigService {
constructor(private readonly configService: ConfigService<envVars>) {}
get nodeEnv(): Environment | undefined {
return this.configService.get('NODE_ENV');
}
}
每个应用程序的主配置模块将设置为全局模块,并将使用别名提供程序,以便在多个应用程序中使用的库可以通过相同的名称访问配置服务,无论使用它们的应用程序如何:
const RootAppConfigModule = ConfigModule.forRoot({
isGlobal: true,
validate,
envFilePath: './.env',
});
@Module({
imports: [RootAppConfigModule],
providers: [
AppConfigService,
{
provide: 'AppConfigService',
useClass: AppConfigService,
},
],
})
每个需要 configService 的服务将注入配置服务令牌。 注入值的类型将是描述该服务所需配置的自定义接口。 该类的构造函数还将断言注入的 configService 上存在配置:
@Injectable()
export class sessionThatUsesConfig {
constructor(
@Inject('AppConfigService') configService: configurations,
) {
assert(configService.confgValue);
}
somethingThatNeedsAConfig() {
console.log(this.configService.configVal)
}
}
我遇到的主要问题是注入它的服务无法识别注入的 appConfigService 值。 以前有人做过类似的事情吗?如果是的话,还有其他方法吗?
运行同样的问题,你解决了吗?