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

React调用Express后端接口返回HTML而非JSON的报错求助

问题解决:React调用Express接口返回HTML而非JSON报错

调用Express后端接口获取数据时触发错误:

SyntaxError: Unexpected token '<', "<!DOCTYPE "... is not valid JSON"

网络面板显示响应为HTML文档,但直接访问localhost:5001/test能获取正确JSON响应,页面无内容显示。相关代码如下:

Express服务器代码

const express = require("express");
const app = express();
app.use(express.json());
const cors = require("cors");
app.use(cors());

app.get("/test", async (req, res) => {
  try {
    const data = {
      isActive: true,
      count: 10,
      message: "Hello, world!",
    };

    console.log(data); // Log the data being sent

    res.json({ username: "Flavio", ...data });
  } catch (err) {
    res.send({ error: "not found" });
  }
});

React组件代码

import React, { useState, useEffect } from "react";

export default function GetData() {
  const [data, setData] = useState(null);

  useEffect(() => {
    fetch("/test")
      .then((res) => res.json())
      .then((data) => setData(data))
      .catch((error) => {
        console.error("Error fetching data:", error);
      });
  }, []);

  if (data === null) {
    return <Loading />;
  }

  return (
    <div>
      <h2>Data Received:</h2>
      <p>isActive: {data.isActive.toString()}</p>
      <p>Count: {data.count}</p>
      <p>Message: {data.message}</p>
      <p>Username: {data.username}</p>
    </div>
  );
}

解决方案

1. 修正React请求路径

React中fetch("/test")是相对当前应用域名的路径,会请求React服务器(通常是3000端口)的/test,而非Express的5001端口。有两种解决方式:

  • 直接使用完整后端地址:
    修改fetch请求为:

    fetch("http://localhost:5001/test")
    
  • 配置React代理(推荐):
    在React项目的package.json中添加代理配置:

    "proxy": "http://localhost:5001"
    

    配置后,相对路径的请求会自动转发到Express服务器,无需修改fetch代码,重启React应用即可生效。

2. 确保Express服务器正确监听端口

现有Express代码缺少端口监听逻辑,添加以下代码启动服务器:

const PORT = 5001;
app.listen(PORT, () => {
  console.log(`Server running on port ${PORT}`);
});

3. 修复Loading组件缺失问题

React代码中使用了<Loading />但未导入该组件,会导致渲染报错。可以替换为简单的加载提示:

if (data === null) {
  return <div>加载中...</div>;
}

或者导入已定义的Loading组件。

验证步骤

  1. 启动Express服务器,确认控制台打印Server running on port 5001
  2. 配置代理或修改fetch地址后,重启React应用
  3. 查看浏览器网络面板,确认接口响应为JSON格式
  4. 页面应正常渲染获取到的数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 10:48:30