You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NestJS/Mikro-ORM执行迁移时无法读取.env环境变量问题

问题根因

两个核心问题导致配置始终无法读取到预期的环境变量:

  • 环境变量键名拼写不匹配:你贴出的process.env打印结果中,数据库用户名对应的键是DB_USER,但配置代码里读取的是process.env.DB_USERNAME,键名不一致导致始终读取到undefined,因此触发默认兜底参数;当你去掉兜底值后,MySQL驱动会默认使用当前系统用户名(即报错中出现的root)发起连接,和你观察到的现象完全吻合。
  • 错误在MikroORM独立配置文件中依赖NestJS模块逻辑:mikro-orm.config.ts是供MikroORM CLI工具直接读取加载的配置文件,CLI运行时不会启动NestJS应用、不会初始化Nest的IoC容器,你写的ConfigModule.forRoot()仅完成了模块定义注册,根本不会执行.env文件的加载逻辑,手动实例化的ConfigService自然也无法读取到预期配置。
修复方案

按以下步骤调整即可解决问题:

  1. 统一环境变量键名,二选一即可:
    • 修改.env文件,将DB_USER改名为DB_USERNAME,和配置代码中的读取键对齐
    • 或者修改配置代码,将所有读取DB_USERNAME的位置改为读取DB_USER,和.env中的定义对齐
  2. 移除mikro-orm.config.ts中和NestJS ConfigModule相关的代码,这类依赖Nest运行时的逻辑无法在MikroORM CLI加载配置时生效,你最开始写的直接用dotenv加载.env文件的逻辑本身是可用的,修正键名后即可正常工作。
  3. (可选,规避CLI路径问题)在项目根目录package.json中增加MikroORM配置,指定使用ts-node加载TS格式的配置文件,避免运行命令时工作目录不一致导致的.env路径错误:
{
  "mikro-orm": {
    "useTsNode": true,
    "configPaths": [
      "./src/mikro-orm.config.ts",
      "./dist/mikro-orm.config.js"
    ]
  }
}

修复完成后可以在配置文件中临时增加打印逻辑,确认读取到的用户名、密码等参数和.env中定义的一致,再执行迁移命令即可正常运行。


内容的提问来源于stack exchange,提问作者Steven Scott

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 16:51:18