私のアプリの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 }
あなたの明示的なPOSTルートでは、 'req.body [0]'を使用していますか?あなたは生のオブジェクトではなく1の長さを持つ配列としてそれを得ているように見えます... –