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

部署Express应用到Heroku出现H10 App crashed错误如何解决

Express.js 部署 Heroku 报 H10 App crashed 修复方案

核心原因说明

H10错误本质是Node进程启动阶段直接异常退出,你日志里的Process exited with status 1已经印证了这点——进程没成功跑起来就挂了,路由请求自然全部返回503。结合你贴的代码,几个高概率诱因和修复方法如下:

先解决日志看不到具体错误的问题

你现在贴的日志只有Heroku平台层面的进程退出记录,没有应用本身的错误栈,根本没法直接定位根因,先给代码加全局异常捕获,把启动时的错误打出来:
替换你现有server.js的内容为:

const express = require('express');
const morgan = require('morgan');
const cors = require('cors');
const connectDB = require('./config/db');

// 捕获启动阶段所有未处理的异常,打印完整错误栈
process.on('uncaughtException', err => {
  console.error('启动异常:', err);
  process.exit(1);
});
process.on('unhandledRejection', err => {
  console.error('异步调用异常:', err);
  process.exit(1);
});

const app = express();
if (process.env.NODE_ENV === 'development') {
  app.use(morgan('dev'));
}

app.use(cors());

const PORT = process.env.PORT || 3000;
// 先连数据库,成功后再启动监听
const start = async () => {
  try {
    await connectDB(); // 你之前引入了数据库连接方法但根本没调用,这里补上
    app.listen(PORT, () => console.log(`服务启动成功,监听端口:${PORT}`));
  } catch (err) {
    console.error('服务启动失败:', err);
    process.exit(1);
  }
};

start();

改完提交推送到Heroku后,执行heroku logs --tail看实时日志,就能看到具体是哪行代码导致崩溃。

高频踩坑点排查

90%的同类问题都是以下几个原因,逐个核对:

  • 环境变量缺失:本地存在.env文件里的配置(比如数据库连接串、密钥),Heroku平台的Config Vars里没配置,导致数据库连接失败、变量读取报错。注意不要把.env文件提交到git,Heroku环境必须在后台面板手动配置所有环境变量。
  • 依赖安装问题:部分运行时需要的包被你装到了devDependencies里,Heroku生产环境默认不会安装devDependencies,启动时会报Cannot find module xxx错误;另外不要把本地的node_modules文件夹提交到git,会导致平台二进制依赖不兼容。
  • 路径配置错误:确认Procfile首字母大写、无后缀,放在项目根目录;如果你的server.js不在根目录(比如在src文件夹下),要把Procfile内容改成对应路径,比如web: node src/server.js。同时确认package.json里存在start脚本:
    "scripts": {
      "start": "node server.js"
    }
    
  • Node版本不兼容:如果本地用的Node版本和Heroku默认版本差过大,会出现语法不兼容报错,可以在package.json里加engines字段指定和本地一致的大版本:
    "engines": {
      "node": "16.x"
    }
    
  • 数据库白名单问题:如果用MongoDB Atlas这类云数据库,要把Heroku的出口IP加到数据库白名单,测试阶段可以临时开0.0.0.0/0允许所有IP连接,排除网络拦截问题。
  • 端口硬编码:你当前的端口写法是对的,绝对不能把监听端口写死成3000,必须优先读取Heroku动态分配的process.env.PORT。

补完异常捕获后看具体错误栈是最快的排查方式,不要瞎猜问题,Node进程退出前打出来的错误信息会直接告诉你根因。

内容的提问来源于stack exchange,提问作者pomoworko.com

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 02:39:09