Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 使用请求解析查询数组并使用express接收_Node.js_Express_Get_Request - Fatal编程技术网

Node.js 使用请求解析查询数组并使用express接收

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

我在发送和接收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
然后当我使用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