Heroku部署应用无法连接MongoDB,本地运行正常求助
先看你控制台抛出的核心错误:POST https://fitnesspush.herokuapp.com/%20users/add 404 (Not Found),这里的%20是空格的URL编码,说明你的前端请求地址里多了一个空格!这是导致404的直接诱因,我们一步步来解决所有潜在问题:
1. 先修复前端请求的URL空格问题
打开你的create-user.component.js第29行,检查请求地址是否写成了/ users/add(注意斜杠后多了空格),把多余的空格删掉,改成/users/add。这个小失误是当前404报错的直接原因,修正后重新部署,这个报错应该会先消失。
2. 确认Heroku的环境变量配置
本地运行正常是因为你本地的.env文件里配置了ATLAS_URI,但Heroku不会读取本地的.env,需要手动在平台配置:
- 登录Heroku控制台,找到你的
fitnesspush应用 - 进入
Settings→Config Vars - 添加键为
ATLAS_URI,值为你的MongoDB Atlas完整连接字符串的变量
另外,还要确保MongoDB Atlas允许Heroku的服务器访问:
- 登录MongoDB Atlas后台,进入你的集群
- 点击
Network Access→Add IP Address - 选择
Allow access from anywhere(如果是测试环境,这个方式最快捷;生产环境可以添加Heroku的IP范围)
3. 修正根目录package.json的main字段
你的根目录package.json里写的是"main": "index.js",但实际启动文件是server.js。虽然你在start脚本里指定了node server.js,但为了避免Heroku的启动逻辑冲突,建议把main字段改成:
"main": "server.js",
4. 优化Mongoose连接配置(可选)
你当前的Mongoose连接选项有些过时,Mongoose 5.x+推荐使用以下配置,避免运行时的警告:
mongoose.connect(uri, { useNewUrlParser: true, useUnifiedTopology: true, useCreateIndex: true })
5. 查看Heroku部署日志排查问题
如果以上步骤完成后还有异常,通过Heroku日志确认服务器启动状态和数据库连接情况:
heroku logs --tail
如果看到日志输出mongoDB database connection established successfully,说明数据库连接正常,问题大概率还是在前端请求路径或者静态资源托管上;如果没有这条日志,说明环境变量或者IP白名单还有问题,需要重新检查。
额外说明:前端proxy配置
你本地client/package.json里的proxy字段是给本地开发用的,Heroku部署时会直接托管client/build的静态文件,这个配置不会影响生产环境,不需要修改。
按照上面的步骤逐一排查,先解决URL空格的问题,再确认环境变量和数据库访问权限,应该就能解决你的部署问题了。
内容的提问来源于stack exchange,提问作者DStewart

