React调用Node.js+Express评论接口时请求体为undefined求助
排查React调用Express评论接口时请求体undefined的问题
检查前端请求的Content-Type与数据格式
确保请求头包含Content-Type: application/json,并且请求体是JSON字符串:- 用fetch的话:
fetch('/api/comments', { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ content: '测试评论', postId: 1 }) }) - 用axios的话默认会自动处理Content-Type,但如果手动修改过请求头,要确认没删掉该配置。
- 用fetch的话:
确认后端express.json()中间件的挂载顺序
所有需要解析JSON请求体的路由,必须在app.use(express.json())之后挂载。比如:// 正确顺序:先加载解析中间件,再挂载路由 app.use(express.json()); app.use('/api/posts', postsRouter); app.use('/api/comments', commentsRouter);如果评论路由在
express.json()之前挂载,后端无法解析请求体,会直接返回undefined。检查前端请求的HTTP方法是否正确
确认前端用的是POST方法(和Postman调用一致),如果误写成GET,GET请求没有请求体,后端自然拿不到req.body。排查后端路由的匹配规则
确保评论接口的路由路径和前端请求的路径完全一致,比如后端是router.post('/'),前端要请求/api/comments而非/api/comments/xxx,避免路由不匹配导致解析中间件未生效。验证后端验证逻辑的影响
虽然移除了required: true,但如果用了Joi/express-validator等工具,检查是否有其他验证规则在解析body之前就抛出错误,导致后续代码拿不到req.body。可以暂时注释所有验证逻辑,测试是否能正常接收请求体,再逐步排查。
内容的提问来源于stack exchange,提问作者Kevin
相关产品推荐
相关产品推荐

