用请求parsing查询数组并用express接收

我有一个问题发送和接收查询参数与快递和请求。

要求方:

const request = require('request'); request({url: 'http://localhost', json: true, qs: {id: [1,2,3,4]}}) 

请求将这样的请求发送到我的服务器:

 http://localhost/?id%5B0%5D=1&id%5B1%5D=2&id%5B2%5D=3&id%5B3%5D=4 

然后当我用快递收到我的结果

 app.get('/', (req, res, next) => { console.log(req.query); }) 

我有

 {id: {0: 1, 1: 2, 2: 3, 3: 4}} 

我想拥有

 {id: [1,2,3,4]} 

如果我手动发送请求使用这个url它的作品

 http://localhost/?id=1&id=2&id=3&id=4 

所以我不明白,如果错误来自request女巫有parsing我的数组问题或express有问题parsing我的查询

这必须与编码和解码的url,当你解码的url不工作,你会得到:

 http://localhost/?id[0]=1&id[1]=2&id[2]=3&id[3]=4 

程序将其视为对象的索引。 %5B等于[%5D等于]以编码的语法。 你不能通过这种链接获得输出,因为我们在后端看到你的代码,因为它们被视为对象的索引。

此url的作品,因为他们没有引用任何索引。

 http://localhost/?id=1&id=2&id=3&id=4 

您可以通过此链接对url进行编码和解码。

好的,在expression式(qs)中,元素数量20有一个限制。

https://github.com/expressjs/express/issues/2661