我想使用环境变量从docs配置每个模块的HttpModule
,我可以使用如下配置:
@Module({
imports: [HttpModule.register({
timeout: 5000,
maxRedirects: 5,
})],
})
但是我不知道从环境可变(或配置服务)中插入baseURL的最佳做法是什么,例如:
@Module({
imports: [HttpModule.register({
baseURL: this.config.get('API_BASE_URL'),
timeout: 5000,
maxRedirects: 5,
})],
this.config
是undefined
,因为它不在课堂上。
从环境变量(或配置服务)设置baseURL的最佳实践是什么?
答案 0 :(得分:3)
HttpModule.registerAsync()
是在版本5.5.0中与此pull request添加的。
HttpModule.registerAsync({
imports:[ConfigModule],
useFactory: async (configService: ConfigService) => ({
baseURL: this.config.get('API_BASE_URL'),
timeout: 5000,
maxRedirects: 5,
}),
inject: [ConfigService]
}),
此问题在issue中进行了讨论。对于TypeOrmModule
或MongooseModule
之类的nestjs模块,实现了以下模式。
useFactory
方法返回配置对象。
TypeOrmModule.forRootAsync({
imports:[ConfigModule],
useFactory: async (configService: ConfigService) => ({
type: configService.getDatabase()
}),
inject: [ConfigService]
}),
尽管卡米尔wrote
以上约定现在适用于所有嵌套模块,并且将 被视为最佳做法(对第三方模块的推荐)。 文档中的更多内容
它似乎还没有为HttpModule
实现,但是也许您可以提出一个问题。我在上面提到的问题中还有其他建议。
还可以查看官方docs以及有关如何实现ConfigService
的最佳实践。
答案 1 :(得分:0)
我在实现ConfigService
时也遇到了几个问题,如NestJS文档中所述(没有类型安全性,没有配置值的模块化,...),我写下了公司最终的NestJS配置管理策略。此处非常详细:NestJS Configuration Management
基本思想是拥有一个中央配置模块,该模块可从流程环境中加载所有配置值。但是,代替为所有模块提供单一服务,每个模块可以注入配置值的专用子集!因此,每个模块都包含一个类,该类指定运行时需要提供此模块的所有配置值。同时,这使开发人员可以通过类型安全的方式访问配置值(而不是在整个代码库中使用字符串文字)
希望这种模式也适用于您的用例:)