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

部署带React Router的React+Express应用到Heroku时遇语法错误求助

解决React Router + Express部署Heroku时的「Uncaught SyntaxError: Unexpected token <」错误

嘿,这个问题我帮不少开发者排查过!你猜的完全没错——核心原因就是静态资源(JS/CSS文件)请求被你的全匹配路由拦截,返回了index.html,导致浏览器把HTML当成JS解析,自然会遇到<就报语法错误。下面一步步帮你搞定:

1. 修正静态文件服务的配置顺序

Express的中间件是按顺序执行的,必须先托管React构建后的静态文件,再定义API路由,最后才放全匹配路由。如果顺序反了,所有请求(包括静态资源)都会被全匹配路由返回index.html。

给你补全正确的服务器代码示例(基于你的片段):

const express = require('express');
const bodyParser = require('body-parser');
const app = express();
const path = require('path');
const bcrypt = require('bcrypt');

// 先配置body-parser处理请求体
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));

// 关键步骤:托管React构建后的静态文件
// 注意:这里的路径要和你的项目结构匹配!
// 如果你的前端代码在根目录的`client`文件夹,build后生成`client/build`,就用下面的路径
app.use(express.static(path.join(__dirname, 'client/build')));

// 在这里定义你的所有API路由(比如用户、数据接口)
app.get('/api/your-endpoint', (req, res) => {
  // 你的API逻辑代码
  res.json({ status: 'success', data: [] });
});

// 最后:所有非API的请求(包括React Router的路由)返回index.html
app.get('*', (req, res) => {
  res.sendFile(path.resolve(__dirname, 'client/build', 'index.html'));
});

// 启动服务器:必须用Heroku提供的PORT环境变量
const PORT = process.env.PORT || 5000;
app.listen(PORT, () => {
  console.log(`Server running on port ${PORT}`);
});

2. 确保Heroku能自动构建React应用

Heroku默认只会运行你的start脚本,不会帮你构建React项目。你需要在根目录的package.json里添加heroku-postbuild脚本,让部署时自动构建前端:

"scripts": {
  "start": "node server.js",
  "heroku-postbuild": "cd client && npm install && npm run build"
}
  • 这里的cd client是进入你的前端文件夹(如果前端在根目录就去掉这部分)
  • npm install确保前端依赖安装完成,npm run build生成静态文件

3. 本地模拟生产环境测试

在部署到Heroku前,先本地验证:

  1. 进入前端文件夹,运行npm run build生成静态文件
  2. 回到根目录,运行node server.js启动服务器
  3. 打开浏览器访问http://localhost:5000,打开开发者工具的「网络」面板
  4. 查看JS/CSS文件的响应内容:如果返回的是index.html,说明静态文件路径配置错误,调整path.join里的路径即可

常见坑点提醒

  • 路径错误:不要硬编码路径,用path.join或path.resolve结合__dirname,避免本地和Heroku的文件结构差异
  • 中间件顺序:静态服务 > API路由 > 全匹配路由,顺序错了肯定出问题
  • 端口问题:必须用process.env.PORT,Heroku会动态分配端口,不能硬编码成3000/5000

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:36:05