4

私は Express 3.x API サーバーで作業しており (4.x にアップグレードしない理由は聞かないでください。私はそれを制御できません)、バッチ リクエストのサポートを実装しようとしています。特定のエンドポイント。エンドポイントは現在、通常のリクエスト (JSON オブジェクトを受け取る) をサポートしていますが、JSON オブジェクトの配列も取りたいと思っています。

POST /api/posts
Body:
[
  { "title": "Hello World", "text": "blah blah" },
  { "title": "Hello World 2", "text": "blah blah blah" }
]

を使用して単一のリクエストのリクエストの本文にアクセスしようとすると、req.body問題なくデータを取得できます (通常の JSON オブジェクトです)。ただし、配列を送信すると、データが配列ではなくオブジェクトのオブジェクト (?) として解析されることがわかりました。

req.body = { "title": "Hello World", "text": "blah blah" };
typeof req.body;
// object
req.body.toString();
// [object Object]

req.body = [
  { "title": "Hello World", "text": "blah blah" },
  { "title": "Hello World 2", "text": "blah blah blah" }
];
typeof req.body;
// object
req.body.toString();
// [object Object],[object Object]

次のような簡単なチェックを使用してみました。

if (req.body.toString() !== '[object Object]') {

しかし、オブジェクトを 1 つだけ含む配列はこれを破ります。例えば:

req.body = [{ "title": "Hello World", "text": "blah blah" }];
typeof req.body;
// object
req.body.toString();
// [object Object]

これを考えると、データが配列かどうかを確認する保証された方法はありますか?

4

1 に答える 1

7

JavaScript 環境でこれを行う一般的な方法は次のとおりです。

if ( req.body instanceof Array ) {
    // do stuff
}

しかし、JavaScript をV8内で実行する余裕があるため、次のものも問題なく使用できます。

if ( Array.isArray(req.body) ) {
    // do stuff
}

どちらを使用するかは個人的な好みです。

于 2015-01-05T06:28:00.363 に答える