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

部署到Heroku时.env文件中MONGO_URI配置不生效问题

问题产生原因
  • 你本地的.env文件通常会被加入.gitignore(这也是最佳实践,避免敏感的数据库凭证泄露到代码仓库),不会被推送到Heroku服务器,dotenv无法读取到不存在的文件,自然无法加载对应的环境变量
  • 未在Heroku平台配置MONGO_URI环境变量,Heroku的环境变量需要单独在平台侧配置,不会自动继承本地的配置
  • dotenv加载代码的执行顺序错误:如果是在执行mongoose.connect的代码之后才调用require('dotenv').config(),那么读取process.env.MONGO_URI的时候dotenv还没完成加载,自然拿不到值
  • dotenv被安装到了开发依赖(devDependencies)中:Heroku默认部署时只会安装生产依赖(dependencies)下的包,dotenv如果在开发依赖里不会被安装,也就无法执行加载逻辑
解决办法
  • 首先确认dotenv加载逻辑放在代码最顶部,早于所有引用process.env变量的代码,正确写法示例:
// 代码第一行就加载dotenv
require('dotenv').config()
// 后续再写mongoose连接等业务逻辑
mongoose.connect(process.env.MONGO_URI, { useNewUrlParser: true }, () => {
  console.log("Connected to db successfully");
});
  • 如果你只在本地开发用dotenv,可以不用把它放到生产依赖,生产环境直接走Heroku的平台环境变量配置:
    1. 进入你的Heroku应用后台,找到「Settings」选项卡
    2. 找到「Config Vars」板块,点击「Reveal Config Vars」
    3. 新增键为MONGO_URI,值为你的MongoDB连接字符串mongodb+srv://test:test@cluster0.j0you.mongodb.net/ecommerce?retryWrites=true&w=majority,保存后重新部署即可
  • 如果你需要生产环境也用dotenv,把dotenv从开发依赖移到生产依赖,执行npm install dotenv --save后重新部署
  • 校验排查:可以在mongoose连接前加一行打印代码console.log('MONGO_URI:', process.env.MONGO_URI),部署后查看Heroku日志确认变量是否正确加载

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 03:27:08