检查 Express 请求数据是否为数组

Check if Express request data is array

我正在使用 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]') {

但是只包含一个对象的数组打破了这一点。例如:

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

鉴于此,是否有保证的方法来检查我的数据是否为数组?

在任何 JavaScript 环境中执行此操作的典型方法是:

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

但是由于您在 V8 中拥有 JavaScript 运行 的奢侈,您也可以毫无问题地使用以下内容:

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

个人喜欢用哪个。