Express:将req.body对象中的数组分配给各个变量

Express: Assigning arrays within req.body object to individual variables

本文关键字:分配 数组 变量 req body 对象 Express      更新时间:2023-09-26

我在让Express和body解析器读取我的应用程序Angular端发送的JSON对象时遇到了不少麻烦。根据我的尝试,我的变量赋值语法在某种程度上似乎不稳定。到目前为止,我已经尝试了很多不同的语法,但都没有成功,所以我希望有人能帮助我找出正确的方法,将请求体中的各个位分配到它们的相关变量中。

以下是我迄今为止所做的一些故障排除:

  • 验证了我想要发送的对象和数据是否真的被张贴了。

  • 验证内容类型是否为"application/json"。

  • 验证body解析器是否正在处理请求,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
    });
};

这是我的特快专递路线的相关部分:

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解析器的调试模式,然后是原始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应该可以工作了。