【问题标题】:Use process.env variable in typeorm.forroot在 typeorm.forroot 中使用 process.env 变量
【发布时间】:2018-10-02 04:46:13
【问题描述】:

遵循本指南:https://docs.nestjs.com/techniques/sql

当我尝试在连接选项中使用 process.env.DB_PASS 时,没有密码被传递到 mysql。当我传递一个原始字符串时,它可以工作。 Dotenv 配置是在创建嵌套应用程序模块之前完成的。

正确执行此操作的最佳方法是什么?

@Module({
  imports: [
    TypeOrmModule.forRoot({
      type: 'mysql',
      host: 'localhost',
      username: 'root',
      password: process.env.DB_PASS,
      database: 'dbname',
      entities: ['./models/*.entity{.ts,.js}'],
      synchronize: true
    })
  ],
  controllers: [],
  components: []
})
export class AppModule implements NestModule {...}

【问题讨论】:

  • 我们在对forRoot 的调用中使用了环境变量,它可以工作。我假设您的模块文件(包含此代码的打字稿文件)已导入 (import) before dotenv 完成工作。 dotenv 应该是您的应用程序导入/完成的第一件事,除非您有充分的理由去做其他事情。
  • 成功了,谢谢!我在考虑错误的操作顺序。元数据解析似乎发生在 NestFactory.create(AppModule) 之前,所以我将 dotenv.config() 移到了应用程序模块导入的上方,而不是在 NestFactory.create(AppModule) 之前。

标签: typeorm nestjs


【解决方案1】:

我们在对forRoot 的调用中使用了环境变量,它可以工作。我假设您的模块文件(包含此代码的打字稿文件)已导入 (import) before dotenv 完成工作。 dotenv 应该是您的应用首先导入/完成的事情,除非您有充分的理由去做其他事情。

【讨论】:

  • 您能否详细说明“在 dotenv 完成工作之前”/“dotenv 应该是您的应用首先导入/完成的事情”是什么意思?
  • 根据 OP 的帖子,我假设他/她正在使用 dotenv 填充 process.env 变量。我解释的是dotenv.load() 必须在任何涉及对process.env 的访问的import 被处理之前执行。 TL;DR:dotenv.load() 必须在读取任何 process.env. 值之前执行。
  • 嗨@VinceOPS,感谢您回来。我没有意识到我们必须明确地做一个dotenv.load()。我在想 NestJS 会自动使 .env 变量在类中可用。 (我对 NodeJS/JS 世界很陌生)。感谢您的回答!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-02-22
  • 1970-01-01
  • 2019-12-18
  • 2022-08-09
  • 2019-04-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多