我正在尝试构建一个简单的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;
答案 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'
}