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

React应用调用Express的/index.js路由获取JSON失败,报SyntaxError

解决React调用Express接口时的JSON解析错误

看起来你遇到的问题核心是Express路由没有正确返回JSON数据,加上React的请求路径不匹配,导致解析失败。我来一步步帮你排查修复:

1. 修复Express路由代码的核心问题

你提供的index.js路由代码有个致命错误:回调函数里只是定义了一个对象,但没有通过res.json()或res.send()把数据发送给客户端!这会让Express默认返回404错误页面(HTML格式),所以React在解析JSON时会遇到HTML的<字符,抛出Unexpected token <的错误;如果是其他非JSON响应,就会出现类似Unexpected token P的错误。

修正后的index.js代码:

var express = require('express');
var router = express.Router();

router.get('/', function(req, res, next) {
  // 用res.json()发送标准的JSON响应
  res.json({
    vitamins: [ { name: "Vitamin B2" } ],
    minerals: [ { name: "Zinc" } ]
  });
});

// 别忘了导出路由
module.exports = router;

2. 确保Express主文件正确挂载路由

在你的Express主应用文件(比如app.js)里,要确保把这个index路由挂载到正确的路径:

const indexRouter = require('./routes/index');
// 挂载到根路径 /,这样访问 / 就会触发上面的路由
app.use('/', indexRouter);

3. 修正React的请求路径

你之前用fetch('/index'),但如果路由是挂载在根路径/,这个请求会找不到对应的路由,返回404 HTML。应该改成请求根路径:

componentDidMount() {
  fetch('/')
    .then(res => {
      // 先检查响应状态是否正常,避免隐藏错误
      if (!res.ok) {
        throw new Error(`HTTP error! Status: ${res.status}`);
      }
      return res.json();
    })
    .then(micros => {
      this.setState({ micros: micros.vitamins });
    })
    .catch(err => {
      // 添加错误捕获,方便调试
      console.error('请求出错:', err);
    });
}

额外调试技巧

  • 直接在浏览器地址栏访问http://localhost:你的端口/,看看返回的是不是合法的JSON字符串,如果是HTML,说明路由还是有问题
  • 打开浏览器开发者工具的Network标签,查看请求的响应内容,确认返回的是不是你预期的JSON

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:58:35