让Express和body-parser读取应用程序的Angular端正在发送的JSON对象时,我一直遇到很多麻烦。根据我的尝试,我的变量赋值语法似乎有些奇怪。到目前为止,我已经尝试了多种语法,但都没有成功,所以我希望有人可以帮助我找出正确的方法,将请求主体中的各个位分配给它们的相关变量。
这是到目前为止我完成的一些故障排除:
验证我要发送的对象和数据实际上已过帐。
验证Content-Type为“ application / json”。
验证body-parser正在处理请求,并且req.body中已填充数据。
尝试使用和不使用“ application / json”作为内容类型的显式设置而结果没有任何变化。
这是$ http在Angular端发送数据的方式:
.controller ('Ctrl', function($scope, $http) {
$scope.generateLabel = function(){
var httpData = [
{"addressToName": $scope.addressToName},
{"addressToStreet1": $scope.addressToStreet1},
{"addressToCity": $scope.addressToCity},
{"addressToState": $scope.addressToState},
{"addressToZip": $scope.addressToZip},
{"addressToEmail": $scope.addressToEmail},
{"parcelType": $scope.parcelType},
{"note": $scope.note},
{"sku": $scope.sku}];
$http({
method: 'POST',
url: '/postURL',
headers: {
'Content-Type': "application/json"
},
data: httpData
});
};
...这是我的Express POST路线的相关内容:
var bodyParser = require('body-parser');
app.use(bodyParser.json({strict: false}));
app.post('/postURL', function(req, res) {
var addressToName = req.body.addressToName;
var addressToStreet1 = req.body.addressToStreet1;
var addressToCity = req.body.addressToCity;
var addressToState = req.body.addressToState;
var addressToZip = req.body.addressToZip;
var addressToCountry = 'US';
var addressToEmail = req.body.addressToEmail;
}
这是我在节点控制台中进行测试时看到的内容。最重要的消息来自body-parser的调试模式,然后是原始的req.body,然后是我要分配给它们的变量:
body-parser:json content-type "application/json" +0ms
body-parser:json content-encoding "identity" +2ms
body-parser:json read body +1ms
body-parser:json parse body +13ms
body-parser:json parse json +1ms
Request body follows:
[ { addressToName: 'My name' },
{ addressToStreet1: 'My address' },
{ addressToCity: 'Anytown' },
{ addressToState: 'OR' },
{ addressToZip: '97504' },
{ addressToEmail: 'My@email.com' },
{ parcelType: '8lb Box' },
{ note: '12314' },
{ sku: '11111' } ]
Variables assigned:
{ addressToName: undefined,
addressToStreet1: undefined,
addressToCity: undefined,
addressToState: undefined,
addressToZip: undefined,
addressToCountry: 'US',
addressToEmail: undefined }
最佳答案
看起来req.body
是具有属性的对象的数组,而不是具有属性本身的对象的数组。您的JS必须是:
var addressToName = req.body[0].addressToName;
var addressToStreet1 = req.body[1].addressToStreet1;
// etc.
我建议让Angular将所有这些属性放到一个对象中,如下所示:
var httpData = {
"addressToName": $scope.addressToName,
"addressToStreet1": $scope.addressToStreet1,
// etc.
};
然后,您现有的JS应该可以使用。
关于javascript - Express:将req.body对象中的数组分配给各个变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38779621/