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

如何将MERN栈Express服务器迁移到子目录并解决Heroku服务文件报错问题

问题根源
  • express.static API使用错误

    express.static 第一个入参要求传入静态资源的根目录路径,你传入了单个文件index.html,导致Express无法正确托管client/build目录下的css、js、图片等静态资源,仅能处理单文件请求。你本地开发时走的是/public目录的托管逻辑,没有触发这段prod专属的错误配置,所以本地运行正常。

  • 相对路径可靠性不足

    你使用的../client/build是相对于Node进程工作目录的相对路径,虽然你在启动脚本中先cd到了server目录再启动服务,但不同环境下工作目录可能存在隐性差异,容易出现路径匹配失败的问题。

修复方案
  1. 先在server.js顶部引入Node内置的path模块,用于生成不受工作目录影响的绝对路径:
const path = require('path');
  1. 替换原有的静态资源托管和全路径路由配置:
// 托管build目录下所有静态资源
app.use(express.static(path.join(__dirname, '../client/build')));

// 所有未匹配路由返回SPA入口文件
app.get('*', (req, res) => {
  res.sendFile(path.join(__dirname, '../client/build', 'index.html'));
});
本地验证方法

在项目根目录执行npm start,模拟Heroku的启动逻辑,确认服务可以正常加载前端资源后再重新部署到Heroku即可。

内容的提问来源于stack exchange,提问作者daniel blythe

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 06:09:03