前端是react,后端是express。前端向后端以get方式传递一个字符串内容的数组,后端req.query方式取出。之前一直跑的好好的,但当数组长度达到30左右的时候就会报错,排查后发现后端的req.query取出的数据变成Object对象类型,导致后面join等方法调用报错。
这个问题解决比较简单,可以前端就join成字符串,或者后端判断是数组还是对象,但是原理性的东西一直没查到。
现在想咨询下各位大佬,出现这个错误的原因和原理是什么?是node的原因,express的原因还是其他呢?
前端是react,后端是express。前端向后端以get方式传递一个字符串内容的数组,后端req.query方式取出。之前一直跑的好好的,但当数组长度达到30左右的时候就会报错,排查后发现后端的req.query取出的数据变成Object对象类型,导致后面join等方法调用报错。
这个问题解决比较简单,可以前端就join成字符串,或者后端判断是数组还是对象,但是原理性的东西一直没查到。
现在想咨询下各位大佬,出现这个错误的原因和原理是什么?是node的原因,express的原因还是其他呢?
5 回答4.8k 阅读✓ 已解决
3 回答1.8k 阅读✓ 已解决
4 回答2.4k 阅读✓ 已解决
1 回答1.6k 阅读✓ 已解决
4 回答1.6k 阅读✓ 已解决
2 回答2.4k 阅读✓ 已解决
2 回答1.7k 阅读✓ 已解决
大概看了一下,总结了一下:
express
的query
参数解析, 用的是qs.parse
方法:qs.parse
方法, 会在 这儿, 解析参数:然后遇到数组类型的参数, 会在 这儿, 判断数组的最大长度, 也就是这个
options.arrayLimit
:而
options.arrayLimit
的默认值, 来自于 这儿:这个
options.arrayLimit
参数的含义, 就是当数组类型的参数的索引(index
), 大于options.arrayLimit
的时候, 就会返回一个Object
类型的newObj
.然后通过
qs
的utils.merge
方法, 合并, 转换参数.