部署PERN应用至Heroku时遭遇404错误求助
排查Heroku部署API 404问题的关键步骤
端口配置检查:确保服务器代码使用Heroku动态分配的端口,代码里必须写
const port = process.env.PORT || 3001;,不能硬编码固定端口(比如3000)。硬编码会导致Heroku无法正确映射端口,请求无法到达服务器。路由匹配验证:
- 确认后端API路由的前缀和前端请求路径完全一致。比如前端请求
/api/users,后端必须有对应的app.get('/api/users', ...)路由定义。 - 如果是前后端同部署的项目,后端要先定义API路由,再配置静态文件服务和兜底路由(比如SPA的
*路由)。如果兜底路由放在API路由前面,所有请求都会被导向前端页面,导致API返回404。
- 确认后端API路由的前缀和前端请求路径完全一致。比如前端请求
启动命令与静态文件配置:
- 检查项目根目录的
package.json里的start命令是否正确。如果是前后端合一的项目,确保启动命令先构建前端(如果需要)再启动服务器,比如"start": "npm run build && node server.js"(根据实际项目调整)。 - 后端用Express的话,必须添加静态文件服务代码:
注意API路由要写在这段代码之前,避免被静态文件路由拦截。const path = require('path'); app.use(express.static(path.join(__dirname, 'client/build')));
- 检查项目根目录的
查看Heroku日志:执行
heroku logs --tail命令查看实时日志,重点关注:- 服务器启动时的日志,确认是否成功监听指定端口。
- API请求到达时的日志,查看请求路径和服务器的路由匹配记录,判断是请求路径错误还是路由未定义。
环境变量检查:在Heroku控制台的配置页面确认
NODE_ENV是否设置为production,以及其他必要的环境变量(如数据库连接字符串)是否配置正确。缺失关键环境变量可能导致路由模块无法正常加载。
内容的提问来源于stack exchange,提问作者kapa
相关产品推荐
相关产品推荐

