我正在开发我的第一个 NestJS 应用程序,它与 app.module.ts
中的硬编码数据库连接字符串一起工作正常。
但后来根据我们的要求,我不得不从环境文件中选择数据库配置值。为此,我遵循了 nestjs 文档网站上的配置文档 - https://docs.nestjs.com/techniques/configuration
但问题是我需要在同一个文件中使用 .env 变量进行数据库连接,这是失败的。
这是我工作正常的原始代码:
@Module({
imports: [
MongooseModule.forRoot(`mongodb+srv://myusername:mypassword@myhost.net?retryWrites=true&w=majority&db=dbname`, { useNewUrlParser: true, dbName: 'dbname' }),
ProductModule,
CategoryModule,
],
controllers: [
AppController,
HealthCheckController,
],
providers: [AppService, CustomLogger],
})
现在,我想从 .env 文件中选择那些数据库值,例如 local.env
, dev.env
等,具体取决于环境。现在,我的这段代码不起作用:
@Module({
imports: [
ConfigModule.forRoot({ envFilePath: `${process.env.NODE_ENV}.env` }),
MongooseModule.forRoot(`mongodb+srv://${ConfigModule.get('DB_USER')}:${ConfigModule.get('DB_PASS')}@myhost.net?retryWrites=true&w=majority&db=dbname`, { useNewUrlParser: true, dbName: 'dbname' }),
ProductModule,
CategoryModule,
],
controllers: [
AppController,
HealthCheckController,
],
providers: [AppService, CustomLogger],
})
原文由 Mohit Bhardwaj 发布,翻译遵循 CC BY-SA 4.0 许可协议
1.继续使用ConfigModule
你需要在 npm scripts 中设置
NODE_ENV
以便它可以用于根据 env 加载一个 env 文件。现在你可以只使用
ConfigModule
:2.使用
dotenv
将一些脚本添加到您的
package.json
以设置您所在的环境。在
main.ts
文件中导入dotenv
。确保在文件顶部执行此操作。3.使用
env-cmd
您可以使用
env-cmd
npm 包。并在
package.json
添加一些针对不同环境的命令,例如:现在您可以使用环境变量,例如:
process.env.MONGO_CONNECTION_STRING
更新:
为了克服不同平台的 env set 命令问题,您可以安装
cross-env
包。并更新脚本: