Express-问题解析查询参数,请求错误
在测试Express端点时,我们发现一些具有长查询字符串(Express-问题解析查询参数,请求错误,express,httprequest,Express,Httprequest,在测试Express端点时,我们发现一些具有长查询字符串(/?x[0]=0&x[1]=1…&x[100]=100)的特定请求失败。应用程序响应HTTP 400(请求错误)。首先,我们认为查询太长,被防火墙/nginx阻止,或者我们遇到了某种nodejs/express限制。然而,经过一些实验,我们发现/?x[21]=21失败,而/?x[20]=20工作正常。为什么会这样?为什么会失败? 结果表明,使用默认的express设置: 调用/?x[20]=20将导致req.query.x=['20']
/?x[0]=0&x[1]=1…&x[100]=100
)的特定请求失败。应用程序响应HTTP 400(请求错误)。首先,我们认为查询太长,被防火墙/nginx阻止,或者我们遇到了某种nodejs/express限制。然而,经过一些实验,我们发现/?x[21]=21
失败,而/?x[20]=20
工作正常。为什么会这样?为什么会失败?
结果表明,使用默认的express设置:
- 调用
将导致/?x[20]=20
,而req.query.x=['20']
- 调用
将导致/?x[21]=21
req.query.x={'21':'21'}
20
的限制,而express允许您设置自己的查询解析器。因此,最简单的解决方案如下所示:
app.set('query parser', function (str) {
return qs.parse(str, {arrayLimit: 1000});
});