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

Netlify项目中React前端调用Express后端出现JSON解析错误的问题排查求助

排查Fetch请求返回Unexpected token < in JSON at position 0的问题

这个错误的核心原因很明确:你的前端Fetch请求没有拿到预期的JSON数据,反而收到了HTML内容(大概率是你的React项目的index.html),所以解析JSON时碰到开头的<就直接报错了。结合你的Netlify子模块部署场景,我整理了几个最可能的问题点和解决思路:

1. Netlify重定向规则拦截了API请求

你的public/_redirects里的/* /index.html 200是个"兜底"规则,它会把所有请求(包括你发往后端的API请求)都转发到前端的index.html页面——这就导致你的API请求根本没机会到达Express后端,自然拿不到JSON数据。

本地开发时没问题,是因为package.json里的proxy配置会被React的开发服务器识别,自动把API请求转发到http://localhost:4000;但Netlify完全不认这个React代理配置,它只遵循自己的重定向规则。

解决方法:修改_redirects,给API请求添加优先级更高的转发规则。假设你的后端API路径都是以/api/开头,调整后的规则应该是这样:

# 先匹配API请求,转发到后端服务
/api/* http://your-backend-deployment-url/:splat 200
# 剩下的所有请求再走前端路由兜底
/* /index.html 200
  • 把http://your-backend-deployment-url替换成你Express后端实际的部署地址(比如如果后端也部署在Netlify上,就是它的站点域名;如果是本地用Netlify Dev测试,就写http://localhost:4000)。
  • :splat是Netlify的占位符,用来保留API路径的后续部分(比如/api/users/1会被转发到http://xxx/api/users/1)。

2. Express后端子模块未正确部署到Netlify

要确认你的后端子模块在Netlify上是否正常运行:

  • Netlify默认会扫描根目录的package.json,如果后端是子模块,你需要在Netlify的构建设置里指定后端的基础目录、构建命令和输出目录(比如后端的构建命令是npm run build,输出目录是build或者dist)。
  • 注意:Netlify对于长期运行的Express服务支持有限,更推荐把后端改成Serverless函数(Netlify Functions),或者把后端部署到专门的Node.js托管服务(比如Render、Heroku),再通过Netlify的重定向规则转发API请求。

3. 检查Fetch请求的路径是否正确

确保你的前端Fetch请求用的是相对路径(比如fetch('/api/data')),而不是硬编码的本地地址(比如fetch('http://localhost:4000/api/data'))——后者在Netlify部署后会因为跨域问题失败,而且也不符合你用重定向转发的逻辑。

内容的提问来源于stack exchange,提问作者Jan de Sterke

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 17:03:11