Node.js应用本地运行正常 部署Heroku后登录注册POST请求返回400错误
可能的原因及解决方案
1. Heroku环境变量缺失
本地.env文件不会自动同步到Heroku平台,你需要手动在Heroku后台的「Settings → Config Vars」中添加所有本地.env内的自定义变量:
- 必须配置
JWT_SECRET,值和本地.env中一致,否则JWT签名生成时会触发错误被catch捕获,返回400 - Heroku安装Postgres插件后会自动生成
DATABASE_URL,不需要手动配置,确保你的生产数据库配置正确读取该变量即可
2. 模块引入路径错误
你的auth.js位于/routers目录下,引入constants的路径写法错误:
// 错误写法,会去/routers/config/constants.js查找文件,不存在该路径 const { SALT_ROUNDS } = require("./config/constants"); // 修正为相对当前文件的正确路径 const { SALT_ROUNDS } = require("../config/constants");
本地运行正常大概率是因为本地运行目录为根目录,Node按运行目录查找文件碰巧生效,部署到Heroku后按文件相对路径严格查找就会触发模块不存在错误。
3. 数据库迁移未执行成功
你的release阶段配置了迁移脚本,但两种情况会导致迁移失败,数据库未创建users表,触发查询/插入错误返回400:
post-release.sh无执行权限:本地执行chmod +x post-release.sh后重新提交代码部署- 迁移脚本本身存在错误:手动执行Heroku命令验证迁移
heroku run npx sequelize-cli db:migrate,查看是否有报错
4. 排查辅助步骤
执行heroku logs --tail查看实时运行日志,触发一次登录/注册请求,即可看到具体的报错信息,快速定位问题根源。
内容的提问来源于stack exchange,提问作者nagehan
相关产品推荐
相关产品推荐

