Node.js + Express API部署至Heroku失败问题排查求助
修复Heroku部署Node.js/Express API的超时问题
嘿,你的R10 (Boot timeout)和H20 (App boot timeout)错误根源很明确,我帮你一步步排查修复:
1. 核心问题:端口绑定错误
你代码里的端口变量写错了大小写!Heroku提供的端口环境变量是大写的PORT,但你写的是process.env.port(小写p),这导致代码一直用本地的5001端口,而Heroku要求应用必须绑定它分配的动态端口,直接触发了启动超时。
修复代码:
修改index.js里的端口定义和日志输出:
// 把小写port改成大写PORT const PORT = process.env.PORT || 5001; // 日志动态显示端口,方便调试 app.listen(PORT , () => { console.log(`Listening on port ${PORT}`); })
2. MongoDB连接的潜在问题
- 环境变量配置:Heroku不会读取本地的
config.env文件,你必须在Heroku应用的「Settings -> Config Vars」里手动添加MONGO_URL变量,值就是你的MongoDB连接字符串。 - Mongoose版本兼容:你用的是Mongoose 6.x,这个版本已经默认启用了
useUnifiedTopology和useNewUrlParser,不需要再手动配置这两个参数,可以简化连接代码:
mongoose.connect(db) .then(() => { console.log('Db Connected');}) .catch((err) => { console.log('Error while connecting to db' , err); })
如果Mongo连接过慢导致启动超时,可以给连接加个超时限制:
mongoose.connect(db, { connectTimeoutMS: 30000 }) // 30秒超时
3. 其他配置检查
- Procfile:你的
web: node index.js是正确的,没问题。 - package.json:
engines里的"node": "v14.x"可以改成更规范的"14.x"(加v也能运行,但行业惯例是不加),start脚本和依赖都没问题。
4. 调试技巧
部署后用Heroku命令行查看实时日志,能快速发现其他启动异常:
heroku logs --tail
最后部署步骤
- 把修改后的代码提交到Git:
git add . git commit -m "Fix port binding and Mongoose config"
- 重新推送到Heroku:
git push heroku main # 如果你用的是master分支就写master
内容的提问来源于stack exchange,提问作者Nadish
相关产品推荐
相关产品推荐

