PERN栈应用部署后调用Heroku Postgres API返回503错误如何排查?
Heroku PERN栈GET请求503错误排查步骤
第一步:检查Heroku应用运行日志
503错误绝大多数是后端服务未正常启动导致,优先通过日志定位根因:
- 本地安装Heroku CLI后运行
heroku logs --app 你的应用名 --tail查看实时日志,发起GET请求时同步观察报错输出 - 优先排查端口配置:Heroku不允许硬编码固定服务端口,必须监听
process.env.PORT,正确示例为app.listen(process.env.PORT || 本地开发端口, () => {}),硬编码端口会直接导致服务启动失败
第二步:验证Postgres配置有效性
按以下步骤排除数据库问题:
- 确认已在Heroku应用后台安装Heroku Postgres插件
- 运行
heroku config --app 你的应用名确认存在DATABASE_URL环境变量,代码中禁止硬编码数据库连接信息,必须从环境变量读取该参数 - 运行
heroku pg:psql --app 你的应用名直接连接数据库实例,能正常进入命令行则说明数据库服务本身正常,执行\d检查待办表等业务表是否已创建,未运行数据库迁移脚本会导致表不存在触发服务报错 - 检查数据库连接配置,Heroku Postgres要求开启ssl连接,pg连接配置必须添加ssl参数,示例:
const pool = new Pool({ connectionString: process.env.DATABASE_URL, ssl: { rejectUnauthorized: false } });
第三步:区分前后端问题
- 直接通过curl或者Postman请求Heroku后端接口地址,例如
curl https://你的应用名.herokuapp.com/todos,如果直接请求也返回503说明是后端问题,和前端无关 - 如果直接请求接口正常,排查前端fetch代码:确认请求地址为Heroku后端域名,没有写成本地
localhost地址,同时确认后端已配置cors中间件允许前端域名访问
常见踩坑点
- package.json的
start脚本必须使用生产环境启动命令,例如node server.js,不能使用nodemon等开发依赖的命令 - 所有生产依赖(express、pg、cors等)必须放在
dependencies字段下,不要放在devDependencies,Heroku部署时不会安装开发依赖
内容的提问来源于stack exchange,提问作者NatMargo
相关产品推荐
相关产品推荐

