部署Node.js应用至Heroku时遭遇H10错误求助
解决Heroku部署Node.js应用时的H10错误
你的代码文件信息
index.js
import express from 'express' import 'dotenv/config' import router from './routes/index.js' import morgan from 'morgan' const app = express() const port = process.env.PORT || 5000 app.use('/public', express.static('public')) app.use(express.urlencoded({ extended: false })) app.use(express.json()) app.use(morgan('dev')) app.use('/', router) app.listen(process.env.PORT || port)
Procfile
web: node index.js
package.json
{ "name": "node-sso-example-app", "version": "1.0.0", "description": "Example Node.js SSO App using WorkOS", "main": "index.js", "type": "module", "scripts": { "test": "echo \"Error: no test specified\" && exit 1", "start": "node index.js" }, "author": "WorkOS", "dependencies": { "express": "^4.18.1", "ejs": "^3.1.8", "router": "^1.3.7", "dotenv": "^16.0.1", "@workos-inc/node": "^2.11.0", "morgan": "^1.10.0", "cookie-parser": "^1.4.6", "express-session": "^1.17.2", "http-errors": "~1.6.3" }, "devDependencies": { "nodemon": "^2.0.19" }, "engines": { "node": "^16.17.0" } }
排查步骤
修复端口监听逻辑并添加错误捕获
你的端口监听代码逻辑冗余,且缺少错误回调,无法捕获启动失败的具体原因。修改为:const port = process.env.PORT || 5000; app.listen(port, (err) => { if (err) { console.error('服务器启动失败:', err); process.exit(1); // 明确退出进程,触发Heroku错误检测 } console.log(`服务器运行在端口 ${port}`); });检查环境变量配置
本地.env文件中的变量不会同步到Heroku,需要通过Heroku CLI手动设置所有必需的环境变量:heroku config:set KEY=VALUE确保WorkOS密钥等核心变量都已正确配置。
验证文件提交状态
确认public目录、routes/index.js等关键文件没有被.gitignore排除,已经提交到Git仓库。Heroku只会部署Git仓库中存在的文件。查看Heroku日志定位根因
执行以下命令实时查看应用日志,这是找到H10错误具体原因的最有效方式:heroku logs --tail日志中会显示崩溃的详细信息,比如模块缺失、语法错误、未定义变量等。
确认Node版本兼容性
你的engines字段指定了Node版本^16.17.0,确保Heroku使用的Node版本符合要求。可以通过以下命令查看Heroku当前使用的版本:heroku run node -v如果版本不匹配,调整
engines字段为Heroku支持的版本。
内容的提问来源于stack exchange,提问作者Will Dersh
相关产品推荐
相关产品推荐

