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

使用ExpressJS托管React打包产物时如何解决React路由cannot GET错误

问题原因

Express 路由遵循从上到下优先匹配的规则,请求命中先定义的路由后就不会继续匹配后续路由:

  • 最初的配置只处理了根路径/的前端路由返回,其他React前端路由没有匹配规则,所以会返回Cannot GET /xxx错误
  • 修改后的配置把*通配符路由放在了最前面,所有请求都会优先命中该路由返回index.html,排在后面的/data接口自然不会生效

解决方法

调整路由定义的顺序即可,优先级按「静态资源 > API接口 > 前端路由兜底」排序,正确配置如下:

// 1. 最高优先级:托管React打包后的静态资源(js、css、图片等)
app.use(express.static(path.join(__dirname, '../client/build')));

// 2. 次高优先级:定义所有Express API接口,全部放在通配符路由之前
app.get('/data', (req, res) => {
    res.json(data);
});
// 其余所有自定义API路由都写在这个区域

// 3. 最低优先级:兜底处理所有未匹配到的请求,返回index.html交给React路由处理
app.get('*', function(req, res) {
    res.sendFile(path.join(__dirname, '../client/build', 'index.html'));
});

优化建议

如果后续API接口较多,建议统一给所有API加上/api前缀(比如/api/data),可以有效避免API路径和前端路由路径重名冲突,也更方便接口维护。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 22:45:04