MEAN Stack中req.body.title未定义问题求助
问题原因与解决方案
嘿,我一眼就揪出问题所在啦!你碰到的req.body.title始终未定义的情况,根源在于请求的Content-Type和实际发送的数据格式不匹配。
问题核心分析
你前端设置的请求头Content-Type是application/x-www-form-urlencoded,但实际发送的是JSON格式的对象。这就让后端的body-parser.urlencoded()解析器“误会”了——它把整个JSON字符串当成了一个表单字段的键,所以req.body才会出现这种怪异结构:
{ '{"title":"some title", "body":"some body", "createdBy":"created By"}':''}
这种情况下,自然找不到req.body.title这个属性啦。
快速解决方案
只需要把前端请求头的Content-Type改成和数据格式匹配的类型就行:
修改前端请求头配置
把createAuthenticationHeaders()方法里的Content-Type替换为application/json,因为你发送的是JSON对象,不是表单编码数据:createAuthenticationHeaders() { this.authService.loadToken(); this.httpOptions = { headers: new HttpHeaders({ 'Content-Type': 'application/json', // 这里改成正确的类型 authorization: this.authService.authToken }) }; }偷懒小技巧
Angular的HttpClient默认会自动把请求体序列化为JSON,还会自动设置Content-Type: application/json。如果没有特殊需求,你甚至可以不用手动写这个请求头,HttpClient会帮你搞定一切~
验证效果
修改完成后,再打印req.body,就能看到正常的对象结构了:
{ title: "some title", body: "some body", createdBy: "created By" }
这时req.body.title就能正确获取到对应的值啦!
内容的提问来源于stack exchange,提问作者Troy Bryant
相关产品推荐
相关产品推荐

