Node.js接收Postman传递的id数组时typeof返回object问题排查
问题原因
这是JavaScript的固有语法特性:typeof 运算符对数组类型的返回值固定为object,你控制台打印的[ 'M', 'N' ]已经是标准数组类型,不需要额外做JSON转换。你调用JSON.parse报错,是因为输入值已经是解析完成的JS数组,不是JSON字符串,无法再次解析。
验证数组的正确方法
用Array.isArray()方法判断即可,测试代码如下:
let c_id: any = req.body.id; console.log(c_id) // 输出 [ 'M', 'N' ] console.log(typeof(c_id)) // 输出 object 属于正常现象 console.log(Array.isArray(c_id)) // 输出 true,证明是数组 console.log(c_id.length) // 输出 2,符合你传入的元素数量 console.log(c_id[0]) // 输出 M,可以正常按下标读取元素
数组参数的兼容处理
如果需要兼容传入单个id字符串的场景,可以加一层兜底转换,确保拿到的一定是数组:
const idList = Array.isArray(c_id) ? c_id : [c_id]
Cosmos DB多ID查询示例
你说直接当数组使用没有得到预期结果,大概率是查询语句的参数写法有误,正确的多ID查询写法参考:
const querySpec = { query: "SELECT * FROM c WHERE c.id IN (@idList)", parameters: [ { name: "@idList", value: idList } ] } // 也可以用ARRAY_CONTAINS写法,效果一致 const querySpec2 = { query: "SELECT * FROM c WHERE ARRAY_CONTAINS(@idList, c.id)", parameters: [ { name: "@idList", value: idList } ] }
内容的提问来源于stack exchange,提问作者Suklesh Rao
相关产品推荐
相关产品推荐

