2016-08-05 92 views
0

我一直在使用Express和body-parser读取应用程序的Angular端发送的JSON对象时遇到了相当多的麻烦。根据我所尝试的,似乎我的变量赋值语法在某种程度上是不可靠的。到目前为止,我已经尝试了很多不同的语法,所以我希望有人能够帮助我找出正确的方法,将请求主体中的各个位分配到相关的变量中。Express:将req.body对象中的数组分配给各个变量

下面是一些我迄今所做的故障排除:

  • 验证了对象,我要发送的数据实际上是被公布。

  • 验证Content-Type是“application/json”。

  • 已验证body-parser正在处理请求,并且req.body中填充了数据。

  • 尝试使用和不使用“application/json”的显式设置作为内容类型,而不改变结果。

下面是如何$ HTTP是在发送对事物的角度侧的数据:

.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 

    }); 
}; 

...这是我的邮政快递航线的相关位:

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; 
} 

下面是我在测试节点控制台时看到的内容。顶部的消息是从身体解析器的调试模式,那么它的原始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: '[email protected]' }, 
    { parcelType: '8lb Box' }, 
    { note: '12314' }, 
    { sku: '11111' } ] 
Variables assigned: 
{ addressToName: undefined, 
    addressToStreet1: undefined, 
    addressToCity: undefined, 
    addressToState: undefined, 
    addressToZip: undefined, 
    addressToCountry: 'US', 
    addressToEmail: undefined } 
+0

在您的快递POST路线中,您是否应该使用'req.body [0]'?看起来你得到它作为长度为1而不是一个原始对象的数组... –

回答

1

貌似req.body是对象的数组与性质,不具有属性本身的对象。你的JS必须是:

var addressToName = req.body[0].addressToName; 
var addressToStreet1 = req.body[1].addressToStreet1; 
// etc. 

我建议有角把所有这些属性到一个单一的对象,像这样:

var httpData = { 
    "addressToName": $scope.addressToName, 
    "addressToStreet1": $scope.addressToStreet1, 
    // etc. 
}; 

然后你现有的JS应该工作。

+0

我与你的建议去了,它的工作完美无瑕。感谢您的提示! – wingmatt

相关问题