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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 06:15:02