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

Heroku部署Node.js应用遇Error R10超时问题求助

Heroku部署Express+Apollo应用问题解决方案

1. 替换启动命令,移除nodemon

Heroku是生产环境,nodemon是开发用的热重载工具,在生产环境运行会直接触发clean exit。修改package.json的启动命令:

"scripts": {
  "start": "node index.js",
  "dev": "nodemon index.js" // 保留该命令用于本地开发即可
}

2. 正确绑定Heroku分配的端口

必须通过process.env.PORT获取Heroku动态分配的端口,不能硬编码固定端口。结合Apollo Server的正确写法如下:

const PORT = process.env.PORT || 4000;
const app = express();
const server = new ApolloServer({ typeDefs, resolvers });

async function bootServer() {
  // 必须等待Apollo Server启动完成后再绑定端口
  await server.start();
  server.applyMiddleware({ app });
  
  app.listen(PORT, () => {
    console.log(`Server running on port ${PORT}, GraphQL path: ${server.graphqlPath}`);
  });
}
bootServer();

重点:一定要等server.start()执行完毕再监听端口,否则启动延迟会触发R10超时错误。

3. 检查Procfile配置

如果使用Procfile,内容需准确无误,且不能带后缀(如不能命名为Procfile.txt),放在项目根目录:

web: node index.js

4. 排查clean exit的具体原因

若修改后仍出现崩溃,拉取Heroku详细日志定位问题:

heroku logs --tail

通常clean exit是因为未捕获的代码错误(如依赖缺失、环境变量未配置),可在index.js开头添加错误捕获逻辑:

process.on('uncaughtException', err => {
  console.error('未捕获异常:', err);
  process.exit(1);
});

process.on('unhandledRejection', (reason, promise) => {
  console.error('未处理的Promise拒绝:', promise, '原因:', reason);
  process.exit(1);
});

5. 重新部署应用

修改完成后提交代码并重新部署:

git add .
git commit -m "修复生产环境启动配置"
git push heroku main

内容的提问来源于stack exchange,提问作者Tylor tian

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 11:39:17