Node express中获取的get参数数组变成对象

新手上路,请多包涵

前端是react,后端是express。前端向后端以get方式传递一个字符串内容的数组,后端req.query方式取出。之前一直跑的好好的,但当数组长度达到30左右的时候就会报错,排查后发现后端的req.query取出的数据变成Object对象类型,导致后面join等方法调用报错。

这个问题解决比较简单,可以前端就join成字符串,或者后端判断是数组还是对象,但是原理性的东西一直没查到。

现在想咨询下各位大佬,出现这个错误的原因和原理是什么?是node的原因,express的原因还是其他呢?

阅读 3.8k
1 个回答

大概看了一下,总结了一下:

expressquery 参数解析, 用的是 qs.parse 方法:

var queryparse = qs.parse;
// ......
req.query = queryparse(val, opts);

qs.parse 方法, 会在 这儿, 解析参数:

var newObj = parseKeys(key, tempObj[key], options, typeof str === 'string');

然后遇到数组类型的参数, 会在 这儿, 判断数组的最大长度, 也就是这个 options.arrayLimit:

&& (options.parseArrays && index <= options.arrayLimit)

options.arrayLimit 的默认值, 来自于 这儿:

arrayLimit: 20,

这个 options.arrayLimit 参数的含义, 就是当数组类型的参数的索引(index), 大于 options.arrayLimit 的时候, 就会返回一个 Object 类型的 newObj.

然后通过 qsutils.merge 方法, 合并, 转换参数.

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题