Node 9+Express 4环境下Body-parser无法获取请求体数据问题
解决Express服务器无法获取PATCH请求体数据的问题
Hey there! Let's break down why your PATCH request isn't passing data to your Express server, even though you've set up bodyParser.json().
核心问题:客户端请求格式不匹配
你的Express服务器已经正确配置了bodyParser.json()来解析JSON格式的请求体,但你的React端fetch请求有两个关键问题:
- 直接传递JavaScript对象作为
body,fetch不会自动将其序列化为JSON字符串 - 没有设置
Content-Type请求头,服务器无法识别请求体的格式,导致bodyParser.json()无法解析
修复步骤
修改你的客户端fetch代码,做以下两处调整:
- 用
JSON.stringify()把请求体对象转为JSON字符串 - 添加
headers选项,指定Content-Type: application/json
修改后的客户端代码:
fetch('/animals', { method: 'PATCH', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({name: 'kitten'}) })
服务器端代码确认
你的服务器端配置是正确的,app.use(bodyParser.json())已经能正确解析JSON格式的请求体,不需要额外添加urlencoded解析器(除非你还要处理表单数据)。另外注意你的GET请求里打印的是res.body,应该是req.body,不过这不是当前问题的重点。
为什么bodyParser.urlencoded对你无效?
bodyParser.urlencoded是用来解析application/x-www-form-urlencoded格式的表单数据的,而你现在要传递的是JSON数据,所以这个解析器自然无法处理你的请求体,这就是为什么之前尝试它没用的原因。
内容的提问来源于stack exchange,提问作者DORRITO
相关产品推荐
相关产品推荐

