sou*_*rop 4 arrays json node.js express body-parser
我正在使用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" }
]
Run Code Online (Sandbox Code Playgroud)
当我尝试使用访问单个请求的请求正文时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]
Run Code Online (Sandbox Code Playgroud)
我尝试使用像这样的简单检查:
if (req.body.toString() !== '[object Object]') {
Run Code Online (Sandbox Code Playgroud)
但是仅包含一个对象的数组将打破这一点。例如:
req.body = [{ "title": "Hello World", "text": "blah blah" }];
typeof req.body;
// object
req.body.toString();
// [object Object]
Run Code Online (Sandbox Code Playgroud)
鉴于此,是否有保证的方法来检查我的数据是否为数组?
在任何JavaScript环境中执行此操作的典型方法是:
if ( req.body instanceof Array ) {
// do stuff
}
Run Code Online (Sandbox Code Playgroud)
但是,由于您的JavaScript可以在V8内运行,因此您还可以使用以下代码而不会出现任何问题:
if ( Array.isArray(req.body) ) {
// do stuff
}
Run Code Online (Sandbox Code Playgroud)
只是您使用哪种个人偏好。
| 归档时间: |
|
| 查看次数: |
1964 次 |
| 最近记录: |