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
相关产品推荐
相关产品推荐

