Fetch API发送对象载荷时Node后端req.body为空如何解决
问题原因
fetch发起POST请求时不会自动序列化JavaScript对象,你手动设置了Content-Type: application/json,却直接把JS对象类型的faqlist赋值给body字段,最终传输的载荷不符合JSON格式规范,后端解析失败就会返回空对象,网络面板也无法正常展示结构化的请求内容。
另外需要确认Express后端是否正确配置了JSON请求体解析中间件,缺少该配置时即使前端传参正确也无法读取req.body。
修复步骤
前端代码修正
给body字段的参数加上JSON.stringify()序列化处理,修正后的核心代码:
let faqlist = ""; // 从外部API拉取FAQ列表 await axiosinstance .get("https://目标外部API地址/api/faq") .then((res) => { faqlist = res.data; console.log("FAQ列表内容:", faqlist); console.log("FAQ列表数据类型:", typeof faqlist); // 提交到自身后端 fetch("/create-page", { method: "POST", headers: { Accept: "application/json", "Content-Type": "application/json", }, body: JSON.stringify(faqlist), // 序列化JS对象为JSON字符串 }); });
补充:当前代码混用了await和.then()异步写法,逻辑可正常运行,但统一为async/await写法可提升代码可读性。
后端配置校验
确保Express服务在定义/create-page路由前,已经注册了内置的JSON解析中间件,配置参考:
const express = require('express'); const app = express(); // 注册JSON请求体解析中间件,Express 4.16及以上版本内置支持,无需额外安装body-parser依赖 app.use(express.json()); // 后续再定义业务路由 app.post('/create-page', (req, res) => { console.log(req.body); // 此处即可正常接收到前端传递的FAQ列表数据 // 编写后续页面创建逻辑 })
内容的提问来源于stack exchange,提问作者lazypotato8821
相关产品推荐
相关产品推荐

