部署Heroku PERN应用时出现「Not found」错误求助
PERN应用部署Heroku后出现404错误的常见原因
前端静态资源路径配置错误
检查React(或其他前端框架)package.json里的homepage字段,Heroku部署时需设为"."或对应Heroku应用域名,否则静态资源会从错误路径加载导致404。同时确认本地执行npm run build后,build目录文件完整,部署时该目录已被正确托管。后端未正确托管静态文件或路由冲突
若用Express做后端,需在所有API路由之后添加静态文件托管及SPA路由处理代码:const path = require('path'); app.use(express.static(path.join(__dirname, 'client/build'))); // 所有非API请求返回前端index.html,解决SPA路由404 app.get('*', (req, res) => { res.sendFile(path.join(__dirname, 'client/build', 'index.html')); });注意路径是否匹配项目结构,避免因目录层级写错导致找不到静态文件。
Procfile配置错误
项目根目录的Procfile需正确指定启动命令,比如web: node server.js(根据你的后端入口文件调整),且不能带后缀名(如Procfile.txt),否则Heroku无法正确启动服务器,引发请求无响应或404。构建步骤缺失
检查package.json的scripts是否包含heroku-postbuild脚本,用于部署时自动构建前端:"scripts": { "start": "node server.js", "heroku-postbuild": "cd client && npm install && npm run build" }若无此脚本,Heroku不会自动构建前端,导致无静态文件可托管。同时确认
.gitignore未误排除build目录、后端入口文件等关键资源。端口与环境变量问题
后端需监听Heroku提供的PORT环境变量,而非硬编码固定端口:const PORT = process.env.PORT || 3000; app.listen(PORT, () => console.log(`Server running on port ${PORT}`));另外确认
NODE_ENV已设为production,部分前端框架在生产环境下的资源加载逻辑不同;检查PostgreSQL的DATABASE_URL是否配置正确,数据库连接失败可能间接引发服务异常。
内容的提问来源于stack exchange,提问作者Paulprg19
相关产品推荐
相关产品推荐

