返回值是对象而不是数组,Node.js 和 Postman

Returned value is an object and not an array, Node.js and Postman

所以我正在尝试一个非常简单的查询,如下所示:

JSON Postman 的输入

 {
        "id" : ["M","N"]
}

我想从 Cosmos DB 服务器取回多个 ID,所以我使用了一个包含许多 ID 的数组。

现在这是我的 API 的开始,我从用户那里获取数据:

let c_id: any = req.body.id;
console.log(c_id)
console.log(typeof(c_id))

//let c_id1 = JSON.parse(c_id)
//console.log(c_id1)
//console.log(typeof(c_id1))

现在我期望从 Postman 返回的是数组,但我一直返回一个对象。

更让我困惑的是 console.log(c_id) 语句将其作为对象打印出来

console.log输出

[ 'M', 'N' ]      //console.log(c_id) output
object           //console.log(typeof(c_id)) output

我不明白这里到底发生了什么。如何将数据作为数组取回?

重现问题的步骤:

  1. 只需在 Postman 上创建一个带有键值对的 POST 请求,其中数组是值
  2. 在您的 API 中创建对 id 的请求并在控制台记录输出

我尝试过的:

  1. 因为它给我返回一个对象,我尝试解析它但返回错误。

位置 0 JSON 中的意外标记 M 语法错误:JSON 中位置 0

中的意外标记 M
  1. 我尝试使用 just 作为数组,但没有得到预期的输出。

in javaScript typeof array is object for check array you can use Array.isArray

示例:

Array.isArray(["M","N"]);  // true

这是应该的。数组是对象。您甚至可以在浏览器的控制台中尝试:

const a  = [1,2,3];
console.log(typeof(a));

或者只是:

console.log(typeof([1,2,3]));

这些将在控制台中产生相同的结果,即 'object'

查看运算符 typeof 的工作原理。由于数组和其他非基元 (Maps, Sets, Date objects, RegExps) 从 Object class 继承,typeof 运算符在您的情况下产生正确的结果。

如果您需要检查您是否正在获取数组,您可以检查您的对象是否具有仅属于所需对象类型的方法或属性,例如:

typeof([].length) == 'number'