Express查询字符串数组解析为对象的问题
这几天检查日志,每天总会有大量上游的调用请求出现400错误(Expected type array but found type object), 这个API Get请求参数如下:
1 | ?arr[]=value1&arr[]=value2&arr[]=value3... |
进一步分析日志发现,上游的查询参数中数组是有指定索引的,比如
1 | ?arr[0]=value1&arr[1]=value2&arr[2]=value3... |
而且奇怪的是并非所有的请求都有问题,只有当arr[]
超过20个才会出现,第一反应是Express的query parser问题,将查询字符串数组解析为对象,
原来Express已经不包含大部分的请求解析中间件了,如json、urlencoded、cookie等中间件都变成可配置的了,只有查询字符串解析中间件还是内置的,其中解析函数默认为qs模块的,可以通过app上的query parse设置。