用express和amp解析服务器端的AngularJS http.post数据。身体解析器

时间:2015-11-18 02:45:11

标签: javascript json angularjs express body-parser

我刚刚开始学习MEAN堆栈,请原谅我,如果这看起来像一个非常愚蠢的问题。我的问题如下:

在客户端(controller.js)我有,

  $http({
  method  : 'POST',
  url     : '/root',
    // set the headers so angular passing info as form data (not request payload)
  headers : { 'Content-Type': 'application/x-www-form-urlencoded' },
  data    :  {
              type:'root',
              username:$scope.rEmail,
              password:$scope.rPassword
            }

 })

在我的服务器端,

app.post('/root', function(req, res) {

  console.log(req.body);

  console.log(req.body.username);
});

我的控制台日志显示:

17 Nov 21:39:04 - [nodemon] starting `node server/server.js`
{ '{"type":"root","username":"testUserName","password":"testPassword"}': '' }
undefined

我会想象req.body.username给我testUserName但是我得到了未定义。我得到的JSON格式有点奇怪。任何人都可以帮我解决这个问题吗?我做了一些阅读并尝试使用body-parser并通过了角度js $ http.post文档,但没有找到任何可以帮助我的东西。

我想问题出在:

 { '{"type":"root","username":"testUserName","password":"testPassword"}': '' }

但我似乎无法弄清楚如何从我的角度控制器中的$ http.post传递数据,以便我只能以标识符:值格式获取我的请求。

4 个答案:

答案 0 :(得分:2)

没关系,我明白了。好像我需要打破编码。

headers : { 'Content-Type': 'application/x-www-form-urlencoded' }

headers : { 'Content-Type': 'application/json' } 

修复了问题。

答案 1 :(得分:1)

请尝试以下源代码:

$http({
  method  : 'POST',
  url     : '/root',
    // set the headers so angular passing info as form data (not request payload)
  headers : { 'Content-Type': 'application/x-www-form-urlencoded' },
  data    :  {
              type:'root',
              username:$scope.rEmail,
              password:$scope.rPassword
            },
  transformRequest: function(obj) {
      var str = [];
      for(var p in obj){
          str.push(encodeURIComponent(p) + '=' + encodeURIComponent(obj[p]));
      }
      return str.join('&');
  }

 })

答案 2 :(得分:0)

$http({
  method  : 'POST',
  url     : '/root',
    // set the headers so angular passing info as form data (not request payload)
  headers : { 'Content-Type': 'application/x-www-form-urlencoded' },
  params    :  {
              type:'root',
              username:$scope.rEmail,
              password:$scope.rPassword
            }

 })

尝试使用' params',也许它不会工作但是尝试一下:P

答案 3 :(得分:0)

我已尝试过" params"而不是"数据"并且工作正常,如果标题是" application / x-www-form-urlencoded"则无关紧要。或" application / json" 但是使用" application / json"与节点上的request.query.param1一起使用。