簡體   English   中英

Express:將req.body對象中的數組分配給各個變量

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

讓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應該可以使用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM