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

React与Node.js数据交互:fetch请求404错误及路由配置疑问

问题解析与解决方案

问题根源

直接在浏览器地址栏访问localhost:5000/store-data时,浏览器发起的是GET请求,但你最初只定义了app.post("/store-data")的路由——后端找不到对应GET请求的处理逻辑,返回404是完全符合HTTP路由匹配规则的正常现象,不是代码bug。

你添加的app.get路由其实毫无意义:GET请求本身没有请求体,req.body.username必然是undefined,控制台打印的内容也不会有有效数据,只是让你访问时不显示404页面而已,完全不符合接口设计逻辑。

正确处理方式

方案1:保留POST接口即可(推荐)

如果这个接口只是用来接收前端表单提交的POST数据,不需要支持GET访问,直接删掉多余的app.get路由就行。只要前端的POST请求能正常发送数据、后端能正确打印req.body内容,就说明接口功能正常,404是合理的——这个接口本来就不是给用户直接在浏览器里访问的。

方案2:添加友好的GET提示(可选)

如果想让误访问的用户知道这个接口的正确用法,可以写一个简单的GET路由,返回规范的提示信息:

app.get("/store-data", (req, res) => {
  res.status(405).json({ message: "该接口仅接受POST请求,请通过前端表单提交数据" });
});

使用405 Method Not Allowed状态码,能明确告诉客户端当前请求方法不被允许,比返回普通的"Hello"更符合HTTP规范。

额外注意

确保你的Node.js后端已经配置了解析JSON请求体的中间件,否则req.body会是undefined。在所有路由定义之前添加:

const express = require('express');
const app = express();

// 解析JSON请求体
app.use(express.json());

// 之后再定义你的POST路由
app.post("/store-data", (req, res) => {
  let data = { name: req.body.username };
  console.log(data.name);
  console.log(JSON.stringify(req.body));
  res.json("Hello");
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 20:39:14