Kon*_*nel 2 httprequest express
在测试我们的Express端点时,我们发现一些具有长查询字符串(/?x[0]=0&x[1]=1 ... &x[100]=100)的特定请求失败.应用程序正在响应HTTP 400(错误的请求).首先,我们认为查询太长,并且它被firewall/nginx阻止,或者我们正在遇到某种nodejs/express限制.然而,经过一些实验,我们发现/?x[21]=21在/?x[20]=20工作正常时失败了.这是为什么?
Kon*_*nel 10
事实证明,使用默认快速设置:
/?x[20]=20结果req.query.x = [ '20' ],而/?x[21]=21结果req.query.x = { '21': '21' }.第二个请求没有通过验证,因为我们期待一个数组而不是一个对象.
这种奇怪行为背后的原因在于qs库表示用于处理查询.
qs还会将数组中的索引限制为最大索引20.任何索引大于20的数组成员都将转换为索引为关键字的对象
Qs允许您更改限制20和表达允许您设置自己的查询解析器.所以最简单的解决方案如下:
app.set('query parser', function (str) {
return qs.parse(str, {arrayLimit: 1000});
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
417 次 |
| 最近记录: |