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

部署Node.js应用至Heroku报H10、H20错误无法访问如何解决

Heroku Node.js 部署报H10、H20错误修复方案

H10为应用启动崩溃错误,H20为应用启动超时错误,两类错误同时出现基本都是启动阶段配置异常、代码运行报错,导致进程没有正常绑定Heroku分配的HTTP端口导致,按以下步骤逐一排查即可:

  • 先拉取应用实时日志定位具体报错,不要盲目改配置
    本地执行命令:

    heroku logs --tail -a log-app-nodejs
    

    执行后保持窗口打开,访问一次应用地址,日志里会直接打印具体崩溃原因,比如缺依赖、找不到文件、代码语法错误等,优先按日志栈修复对应问题。

  • 高频问题逐一排查

    • 端口硬编码错误:Heroku会动态分配启动端口,存在process.env.PORT环境变量里,代码里绝对不能硬编码监听3000、8080这类固定端口,监听逻辑必须改成:
      const PORT = process.env.PORT || 3000
      app.listen(PORT, () => {
        console.log(`服务运行在${PORT}端口`)
      })
      
      硬编码固定端口100%触发H10错误。
    • 启动脚本配置错误:检查项目根目录package.json里的scripts字段,必须配置正确的start命令,比如入口文件是index.js就写:
      "scripts": {
        "start": "node index.js"
      }
      
      Heroku部署完成后默认执行npm start启动应用,没有配置start脚本、脚本里的入口文件路径写错(比如大小写和实际文件不一致,Heroku底层是Linux系统,文件名大小写敏感)都会直接启动崩溃。如果是TypeScript项目、需要提前编译源码,要额外配置postinstall脚本执行编译命令,保证启动时能找到编译后的产物。
    • 依赖分类错误:不要把express、数据库驱动这类运行时需要的依赖装到devDependencies里,Heroku生产环境默认不会安装开发依赖,启动时找不到对应包会直接抛错。本地可以执行npm install --production && npm start模拟生产环境启动,如果这步本地跑不通,Heroku上必然启动失败。
    • Procfile配置错误:如果项目根目录手动创建了Procfile,要确认进程类型是web,启动命令正确,示例:
      web: npm start
      
      误把进程类型写成worker会导致HTTP端口没有绑定,直接触发启动错误。
    • 启动阻塞超时:如果以上配置都正确还是报H20超时,检查启动逻辑里有没有阻塞操作:比如启动阶段同步加载超大文件、数据库/第三方服务连接配置错误导致连不上卡很久、大量同步计算占用时间,导致启动超过Heroku默认的60秒超时阈值。这类问题把非必要的初始化逻辑挪到端口监听成功之后再执行,同时检查外接服务的连接配置、IP白名单是否正确。

本地验证通过再推代码:

  1. 删除本地node_modules文件夹
  2. 执行npm install --production
  3. 本地模拟Heroku端口环境启动:Mac/Linux执行PORT=5000 npm start,Windows CMD执行set PORT=5000 && npm start
  4. 访问本地localhost:5000确认服务正常响应,无报错

本地验证无问题后,提交改动推送到Heroku即可:

git add .
git commit -m "fix: resolve heroku startup crash"
git push heroku main

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 23:48:21