javascript - NestJS - 如何在主应用程序模块文件中使用 .env 变量进行数据库连接

标签 javascript node.js environment-variables nestjs dotenv

我正在开发我的第一个 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 的 DB 值。 , 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],
})

最佳答案

从这里的 Nestjs 文档 - https://docs.nestjs.com/techniques/configuration
这些步骤适用于 MySQL 和 TypeORM。

  • 安装 Nestjs 配置模块 - npm i --save @nestjs/config .它依赖于 dotenv
  • 创建 .env文件在您的根文件夹中并添加您的键/值对,例如DATABASE_USER=myusername
  • 打开 app.module.ts 并导入配置模块
  •     import { ConfigModule } from '@nestjs/config';
    
  • 将以下行添加到 app.module.ts 的导入部分.我将它添加为第一个导入。它将自动加载 .env 文件的内容。
  •     ConfigModule.forRoot(),
    
  • 然后,您可以按照数据库配置部分中通常的 process.env. 开始使用 env 变量,例如
  •     process.env.DATABASE_USER
    
    有关 ConfigModule 的更多配置,请参见上面的链接。您可以使用自定义文件/路径并将模块设置为全局可见。

    关于javascript - NestJS - 如何在主应用程序模块文件中使用 .env 变量进行数据库连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63285055/

    相关文章:

    自定义容器中的 Azure Web App,环境变量未从应用服务传播到容器

    javascript - Angularjs:从 $scope 场景中提取显示数据

    node.js - SocketIO 与客户端和服务之间的网关通信?

    node.js - 如何修改node js响应

    ruby - 在 ruby​​ 中使用 $ 和 ENV 访问环境变量

    security - 保护 Cloud Foundry 环境变量中的服务参数

    javascript - 如何在单独的文件中包含 JavaScript 对象

    javascript - 自动完成 ='off' 在 Firefox 中不起作用?

    javascript - 无法将接收到的 JSON 解码为数组

    node.js - 以排序形式从多个文档返回内部数组元素