我遇到了无法诊断的问题。
在服务器上,我有一个使用Express.js的简单URL处理程序:
var express = require('express');
var app = express();
var bodyParser = require('body-parser');
var multer = require('multer');
app.configure(function() {
app.use(app.router);
app.use(bodyParser.json()); // see: http://expressjs.com/api.html#req.body
app.use(bodyParser.urlencoded({
extended: true
}));
});
app.post('/submit', function (req, res) {
console.log(req.body);
});
在客户端,有一个用Angular控制器处理的表单:
$scope.submit = function () {
// $http.post('/submit', $scope.data); // POST request to send data to the server
$http({
method: 'POST',
url: '/submit',
data: $scope.data
});
console.log('POST /submit ' + JSON.stringify($scope.data));
};
在浏览器的控制台中一切正常:$scope.data
有效; Node.js也会按预期响应console.log
,但会写undefined
,这意味着request.body
未定义。
我做错了什么?我该如何解决?
答案 0 :(得分:2)
如果您使用 Express 3 ,则不必使用正文解析器模块,因为它已与 Express 3捆绑为express.bodyParser
。你得到一个空体,因为你将app.use(app.router)
放在身体解析器之前。
app.configure(function() {
app.use(express.bodyParser());
app.use(app.router);
});
这就是您的其他解决方案正常运作的原因:
app.post('/submit', bodyParser.json(), function (req, res) {
答案 1 :(得分:0)
好吧,我刚刚想出了解决方案,它确实有效。 Here使用正文解析器app.post
用几句话来解释。所以我将POST请求处理程序定义更改为:
app.post('/submit', bodyParser.json(), function (req, res) {
console.log(req.body);
});
现在不仅console.log(req.body)
返回有效数据,而且它在服务器上正确地反序列化为JSON而没有任何额外的代码(好吧,预期来自Angular + Node对)。