fetch发送POST请求后服务端req.body为空对象如何解决
问题原因及解决方案
1. 客户端代码问题修正
你指定了请求头Content-Type: application/json,但请求体直接传入了原始字符串,未按照JSON规范序列化,同时options对象缺少闭合大括号,属于语法错误。
修正后的客户端代码:
const status = "Y"; const options = { method: 'POST', headers: { 'Content-type': 'application/json' }, // 序列化请求体为合法JSON格式 body: JSON.stringify(status), // 更常用的写法是封装为对象,后续取值更清晰: // body: JSON.stringify({ status: status }) }; // 补全缺失的对象闭合大括号 fetch('/events/<%- event.id %>/prompt', options) console.log(options.body)
2. 服务端配置修正
Express默认不会解析POST请求的JSON格式请求体,需要手动开启对应的解析中间件:
在项目入口文件(通常为app.js/index.js)中,所有路由定义之前添加如下代码:
// Express 4.16+ 内置JSON解析中间件,无需额外安装body-parser app.use(express.json());
如果使用封装为对象的传参方式,控制器中可以通过req.body.status拿到对应的"Y"值;如果直接传递序列化的字符串,控制器中req.body直接就是"Y"。
可选排查项
如果路由没有配置统一前缀,路由定义需要添加开头的斜杠,避免路径匹配异常:
router.route('/events/:id/prompt') .get(catchAsync(events.showPrompt)) .post(catchAsync(events.checkIn))
内容的提问来源于stack exchange,提问作者econobro
相关产品推荐
相关产品推荐

