Express中DELETE请求req.body为空 同参数POST传参正常
问题产生原因
问题根源在前端封装的api.js请求逻辑,和Express框架无关:
你在fetch请求配置中写死了请求体赋值规则:
body: method === 'POST' || method === 'PATCH' ? JSON.stringify(input) : null,
这段逻辑只给POST、PATCH两个方法附加序列化后的请求参数,其余所有HTTP方法(包括你调用的DELETE)的请求体都会被直接设为null,参数根本没有发送到后端,自然Express里打印req.body是空对象。
补充说明:HTTP协议本身没有禁止DELETE方法携带请求体,Express内置的express.json()解析中间件默认也支持解析DELETE请求的JSON格式请求体,你之前POST请求能正常拿到参数,只是因为判断逻辑刚好覆盖了POST方法而已。
修复方法
直接调整前端api.js里的请求体判断逻辑,把DELETE方法加入允许携带请求体的方法列表即可,找到原来的body配置行,替换为:
body: ['POST', 'PATCH', 'DELETE'].includes(method) ? JSON.stringify(input) : null,
修改后重新发起DELETE请求,参数就会正常被序列化到请求体中发送,后端即可通过req.body正常读取到传递的字段。
你当前服务端已经配置了express.json()中间件(否则POST请求也无法正常解析body),服务端代码不需要做任何调整。
内容的提问来源于stack exchange,提问作者Daemios
相关产品推荐
相关产品推荐

