我正在处理Node.js中的库qs
,它允许您对字符串化和解析查询字符串。
例如,如果我想发送一个包含项目数组的查询,我会qs.stringify({ items: [1,2,3] })
,这会将其作为我的查询字符串发送:
http://example.com/route?items[0]=1&items[1]=2&items[2]=3
(编码的URI将是项目%5B0%5D%3D1%26items%5B1%5D%3D2%26items%5B2%5D%3D3)
当我在服务器上qs.parse(url)
时,我会收回原始对象:
let query = qs.parse(url) // => { items: [1,2,3] }
但是,根据文档,qs
数组的默认大小限制为20:
qs还会限制将数组中的索引指定为最大索引20.任何索引大于20的数组成员都将转换为索引为键的对象
这意味着如果我在数组中有超过20个项目,qs.parse
会给我一个这样的对象(而不是我期望的数组):
{ items: { '0': 1, '1': 2 ...plus 19 more items } }
我可以通过设置一个param来覆盖此行为,例如:qs.parse(url, { arrayLimit: 1000 })
,这将允许最大数组大小为1,000。因此,这会将1,001个项目的数组转换为普通的旧JavaScript对象。
根据this github issue,限制可能是针对"安全考虑因素" (同一in this other github issue)。
我的问题: