web-dev-qa-db-ja.com

POSTからのエクスプレス解析配列

Express APIを実行していると、POSTルートに到達したときに、オブジェクトの配列を含むデータを正しく解析するのに苦労しています。

コードの簡略版-

var express = require('express');
var app = express();
var router = express.Router();
var bodyParser = require('body-parser');
var parseUrlencoded = bodyParser.urlencoded({ extended: false });

router.post('/', parseUrlencoded, function(req, res) {
    console.log(req.body);
});

次の方法でAPIをヒットします

{ name: "Object name", 
  arrayOfObjects: [
      { name: "Sub Object Name", subType: "Sub Object Type" }, 
      { name: "Sub Object Name 2", subType: "Sub Object Type 2" }
  ] 
}

ログアウトする

{ name: "Object name", 
  'arrayOfObjects[0][name]': "Sub Object Name",
  'arrayOfObjects[0][subType]': "Sub Object Type",
  'arrayOfObjects[1][name]': "Sub Object Name 2",
  'arrayOfObjects[1][subType]': "Sub Object Name",
}

これを配列として受け取りたいのですが、これはPUTリクエストを使用する場合です。

BodyParserなどの構成を使用してこれが可能であると確信していますが、適切な解決策を見つけるのに苦労しています。

6
user215674

わかりました。あなたの質問から、POST Bodyをjson配列のように操作してから、qs libraryを使用してextended- true

app.use(bodyParser.urlencoded({ extended: true }));
15

arrayの代わりにstringを送信し、extendedオプションがfalseの場合。

正面からjs:

var fruits = ["Banana", "Orange", "Apple", "Mango"];
$.ajax("/send", {
     data: { "strArr": fruits.join() },
     type: "POST",
     async: true,
 ......

サーバーからjs:

router.post('/send', function(req, res) {
    var fruits = req.body.strArr.split(",");
    console.log(fruits); // This is an array
});
5
J.C. Gras

オブジェクトの2番目の部分を解析して、Nodeがオブジェクトを文字列から配列に変換するようにする必要があります。

JSON.parse(req.body.arrayOfObjects);

オブジェクトの2番目の部分に必要な配列を返します

0
Fabien Lebas

拡張オプションをtrueに変更します。jsonに変換することは控えます。

0
turmuka