You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

部署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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 08:39:46