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

发布于 2022-09-12 04:29:46 字数 267 浏览 18 评论 0

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

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

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

终遇你 2022-09-19 04:29:46

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

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 方法, 合并, 转换参数.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文