Node.js 使用请求解析查询数组并使用express接收
我在发送和接收express和request的查询参数时遇到问题 请求方:Node.js 使用请求解析查询数组并使用express接收,node.js,express,get,request,Node.js,Express,Get,Request,我在发送和接收express和request的查询参数时遇到问题 请求方: 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 然后当我使用expr
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
然后当我使用express收到结果时
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
因此,我不知道错误是否来自解析我的数组时遇到问题的
请求
,或者express
解析我的查询时遇到问题这与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进行编码和解码。好的,在express(qs)中,元素编号20有一个限制
我知道,有没有一种方法可以这样说请求解析:
http://localhost/?id=1&id=2&id=3&id=4
尝试将qs
更改为普通{}
让我看看它返回了什么@ajouve非常好的问题,那么我认为您不应该指定[index]
s,因为当您这样做时,它显然会从数组转换为对象。当您不指定[]
时,索引将按顺序排列。我想就选那个跑的吧@AjouveI没有指定索引,request
会自动执行,它会将这样的对象{id:['a',b']}
转换为id[0]=a&id[1]=b
而不是id=a&id=b
。我只是想找到一种方法来解析我的查询当你做{id:null}
或{id:undefined}
@AjouveIf你想得到一个数组,试着用以下格式发送数据:{'qs[]':[1,2,3,4]}
。你也可以使用选项useQuerystring:true,
将查询参数字符串化为?id=1&id=2&id=3&id=4