2016-08-05 3 views
0

私のアプリのAngular側が送信しているJSONオブジェクトをExpressとbody-parserで読み取るのにかなり苦労しています。私が試したことに基づいて、私の変数の代入構文は何らかの方法でうまくいくようです。これまでのところ全く別の構文を試してみましたので、リクエストボディのさまざまなビットを関連する変数に割り当てる正しい方法を理解できるように助けてくれることを願っています。Express:req.bodyオブジェクト内の配列を個々の変数に割り当てる

は、ここで私はこれまでやったトラブルシューティングの一部です:

  • は、オブジェクトと、私が送信したいデータが実際にPOSTされていることを確認しました。

  • コンテンツタイプが "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 

    }); 
}; 

...そして、ここに私のエクスプレス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; 
} 

これは、私がそれをテストするときにノードコンソールで見ているものです。 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. 

私は角のようなので、1つのオブジェクトにこれらのプロパティのすべてを入れたことをお勧め:

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

を次に既存のJSは動作するはずです。

+0

私はあなたの提案に行って、それは完璧に働いた。ヒントをありがとう! – wingmatt

関連する問題