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

MERN应用部署Heroku报R10/H10错误无法访问问题求助

故障根因

触发R10启动超时、后续H10 503报错的核心原因是后端服务硬编码固定监听5500端口,未绑定Heroku动态分配的服务端口。
Heroku的Web进程启动时会自动分配一个随机可用端口,端口值存放在系统环境变量PORT中,平台要求应用必须在启动后60秒内绑定到该端口,否则会直接发送SIGKILL信号终止进程,导致服务反复崩溃重启。你从日志中看到应用固定监听http://localhost:5500就是最直接的故障特征,另外你之前配置的MONGO_URL已经生效,Mongo连接成功的日志说明数据库相关配置没有问题,不需要调整这部分内容。

修复步骤
  • 修改后端端口监听逻辑,删除硬编码的5500端口配置,改为优先读取Heroku注入的PORT环境变量,本地开发无该环境变量时再 fallback 到你本地使用的5500端口。
    如果你原来的监听代码是:
    // 错误写法:硬编码端口+绑定localhost
    app.listen(5500, 'localhost', () => {
      console.log('Server running on http://localhost:5500')
    })
    
    需要修改为:
    // 正确写法:优先读环境变量,不强制绑定localhost
    const PORT = process.env.PORT || 5500;
    app.listen(PORT, () => {
      console.log(`Server running on port ${PORT}`)
    })
    
    注意:不要显式指定绑定地址为localhost/127.0.0.1,Heroku要求服务绑定到0.0.0.0地址,多数Node.js Web框架默认就是该配置,只要不手动写死localhost即可。
  • 检查package.json中的启动脚本配置,确保start脚本是用Node直接启动生产环境的后端入口文件,不要用nodemon、webpack-dev-server、vite这类开发环境工具启动生产服务,这类工具会额外占用端口、拖慢启动速度,极易触发R10超时。正确的脚本配置参考:
    {
      "scripts": {
        "start": "node server.js",
        "dev": "nodemon server.js"
      }
    }
    
  • 如果你采用前后端同部署方案(前端构建后的静态资源由后端服务托管),确认生产环境下没有启动前端独立的开发服务,所有静态资源路径配置正确,避免额外进程占用端口。
验证方式

代码修改完成后重新推送到Heroku部署,执行heroku logs --tail查看实时日志:

  • 若日志中显示服务监听的端口为Heroku分配的随机数字端口(不是固定5500)
  • 无R10 Boot timeout报错
  • 出现Mongo连接成功、服务启动完成的日志
    等待10秒左右访问应用地址即可正常加载,不会再出现Application error提示。

内容的提问来源于stack exchange,提问作者228_ daudibohra Mufaddal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 10:09:48