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

Posted

技术标签:

【中文标题】检查 Express 请求数据是不是为数组【英文标题】:Check if Express request data is array检查 Express 请求数据是否为数组 【发布时间】:2015-03-02 15:07:20 【问题描述】:

我正在使用 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 对象)。但是,当我发送一个数组时,我发现数据被解析为 objects(?) 的对象而不是数组。

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]

鉴于此,是否有办法检查我的数据是否为数组?

【问题讨论】:

if (req.body instanceof Array) Array.isArray(req.body);也返回 true 该死的,我为什么没有想到那些...非常感谢@CoryDanielson!如果你能把你的 cmets 变成一个答案,我会继续接受它! 【参考方案1】:

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

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

但由于您可以在 V8 中运行 JavaScript,因此您也可以毫无问题地使用以下内容:

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

只是个人喜好。

【讨论】:

两种解决方案都对我有用,但我认为***解决方案更具可读性。有谁知道使用其中一种是否会带来卓越的性能优势? 不,两者之间绝对没有有意义的性能差异。除非您在循环中运行此代码一百万次,否则您不会注意到差异。

以上是关于检查 Express 请求数据是不是为数组的主要内容,如果未能解决你的问题,请参考以下文章

在 Laravel 中检查请求数组是不是为空

如何使用 nodejs / express 将数据存储在 mongodb 中?

Express - 无法发送重定向,对预检请求的响应未通过访问控制检查

绕过Referer和Host检查

节点 express REST API 中的 CORS 错误(PATCH 请求)

VB.NET 不在 sql server 2008 express 中创建数据库