Node.js应用部署到Heroku后GET、POST请求无响应如何排查
Heroku部署Node.js应用接口无响应排查步骤
1. 确认服务监听配置合规
- 监听代码不能绑定本地回环地址127.0.0.1,必须绑定0.0.0.0或者省略host参数,正确示例:
// 正确写法 app.listen(process.env.PORT, '0.0.0.0', () => { console.log(`服务启动成功,端口:${process.env.PORT}`) })
本地运行时绑定127.0.0.1不影响使用,但Heroku要求服务必须监听公网可访问的地址,否则外部请求无法到达应用。
- 检查Heroku日志中是否输出了你写的服务启动成功日志,如果没有对应输出,说明服务在启动流程中就卡住了,优先排查启动阻塞问题。
2. 排查服务启动阻塞问题
- 本地执行生产启动命令
npm run start验证,不要用本地开发常用的npm run dev或nodemon启动,很多时候开发环境配置和生产环境不一致,会导致生产启动失败。 - 检查数据库、第三方服务的连接配置,是否硬编码了本地地址、账号密码,部署到Heroku后没有配置对应环境变量,数据库连接超时会直接卡住整个服务,导致所有请求无响应。
- 本地启动正常的话,在终端执行
heroku logs --tail查看Heroku实时日志,发起Postman请求时观察是否有新的日志输出:- 完全无输出:请求未到达Node.js服务,回到第一步检查监听配置
- 有报错信息:直接对应报错内容调整代码即可
3. 验证路由访问配置
- 先新增一个根路径测试路由,示例:
app.get('/', (req, res) => res.send('服务运行正常'))
部署后直接在浏览器访问Heroku分配的域名,如果能正常返回文本,说明服务本身运行正常,问题出在业务路由配置上。
- 检查是否配置了全局路由前缀,本地访问时带了前缀,部署后请求漏掉前缀会导致找不到路由。
- 检查全局中间件配置,是否有鉴权、跨域中间件逻辑错误,拦截了所有外部请求导致无响应。
4. 核对依赖与环境变量配置
- 检查package.json的
dependencies字段,是否包含了所有生产环境需要的依赖,不要把生产依赖写到devDependencies中,Heroku部署时默认不会安装开发依赖,会导致启动时报找不到模块的错误。 - 核对所有代码中用到的环境变量,是否都在Heroku应用的配置页中完成添加,缺少环境变量会导致代码读取到undefined,引发异常卡住服务。
内容的提问来源于stack exchange,提问作者Ahmed Sharaf
相关产品推荐
相关产品推荐

