在Node.js应用程序中使用body-parser解析POST数据

时间:2014-09-07 14:00:50

标签: javascript node.js parsing

我正在尝试构建一个简单的Node.js应用程序,它将解析传递给它的数据作为来自我的AngularJS应用程序的POST请求。下面是我的AngularJS应用程序和我的Node.js应用程序中使用的代码。我面临的问题是我在网上搜索试图找到如何解析POST请求中传递的信息(数据和标题),但未能找到任何示例,因此任何有关解析(数据和标题)示例的帮助都会传入POST请求对我很有帮助。感谢。

注意:我使用的是express 4.1.2,body-parser 1.8.0。

节点应用:

var express = require('express');
var http = require('http');
var bodyParser = require('body-parser');

var app = express();
app.set('port', process.env.PORT || 3000);
app.use(bodyParser.json());

app.post('/', function (req, res) {
  console.log(req.body);
  res.send(200);
});

http.createServer(app).listen(app.get('port'), function(){
  console.log('Server listening on port ' + app.get('port'));
});

POST请求代码

          var deferred = $q.defer();

          var dataObj = {};
          dataObj.name = 'Chan';
          dataObj.email_address = 'email@domain.com';

          var myToken = '1234567890';

          $http({ method:'POST',                     
                  url: '/',
                  data: dataObj,
                  headers: { 'Token' : myToken
                  }
          }).success(function(data,status,headers,config){
                deferred.resolve(data);
          }).error(function(data,status,headers,config){ 
                deferred.reject(status);
          });

          return deferred.promise; 

1 个答案:

答案 0 :(得分:0)

如果您将data设置为普通的js对象,则angular会将其解释为具有该对象中各种键和值的urlencoded格式。

所以这里有两个可能的修复方法。一种是在app.use(bodyParser.urlencoded({ extended: false }));

之后添加app.use(bodyParser.json());之类的内容

第二种可能的解决方法是将$ http调用更改为发布JSON而不是urlencoded数据。为此,请将data: dataObj,更改为data: JSON.stringify(dataObj),并将'Content-Type': 'application/json'添加到headers,以便它看起来像这样:

headers: {
  'Token' : myToken,
  'Content-Type': 'application/json'
}