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

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改成和数据格式匹配的类型就行:

  1. 修改前端请求头配置
    把createAuthenticationHeaders()方法里的Content-Type替换为application/json,因为你发送的是JSON对象,不是表单编码数据:

    createAuthenticationHeaders() { 
      this.authService.loadToken(); 
      this.httpOptions = { 
        headers: new HttpHeaders({ 
          'Content-Type': 'application/json', // 这里改成正确的类型
          authorization: this.authService.authToken 
        }) 
      }; 
    }
    
  2. 偷懒小技巧
    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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:27:26