You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React Native GET传数组到Node.js服务端被解析为字符串如何解决

问题原因
  • 前端传参写法错误:GET请求的URL查询参数是纯文本格式,你直接把数组_bids拼接到URL字符串里时,JS会自动调用数组的toString()方法做隐式类型转换,单个元素的数组[37]会被转成字符串"37",多元素数组会被转成逗号分隔的字符串(比如[37,38]转成"37,38"),这种格式后端默认不会解析为数组类型。
  • 后端判断逻辑存在bug:你写的req.query.bids !== []判断永远成立,因为JS中数组是引用类型,独立创建的空数组和任何其他值做非全等比较都不会相等,这个判断完全起不到空值校验的作用。
  • 你提到的调用bids.json()是完全错误的用法:req.query已经是框架解析完成的键值对对象,不是未解析的请求流/Buffer,不存在json()方法,调用会直接抛错。

你当前控制台输出bids是长度为2的字符串"37",就是因为前端拼接时数组被隐式转成了字符串,字符串"37"的字符长度正好是2,和输出结果完全匹配。

修复方案

前端调整

不要手动硬拼接数组到URL里,使用标准的同参数名重复传值的数组传参格式(格式为bids=37&bids=38),所有后端的query解析器默认都能识别这种格式为数组。
手动拼接参考代码:

// 单独处理数组参数拼接,记得做URL编码
const bidsQuery = _bids.map(item => `bids=${encodeURIComponent(item)}`).join('&');
const url = `${GLOBAL.BASE_URL}/api/fortrades/bid4post?post_trade_id=${encodeURIComponent(item.id)}&${bidsQuery}`;
const _res = await helper.getAPIp(url, _result, _params, "GET");

如果你的helper.getAPIp方法支持传入params配置对象,直接把bids: _bids作为参数传入即可,常规请求封装会自动处理数组参数的序列化,不需要手动拼接。

后端调整

删掉无效的空数组判断,同时兼容单值字符串、逗号分隔字符串、标准数组三种传参格式,统一转成数字数组:

let bids = req.query.bids;
if (!bids) {
  bids = [];
} else if (typeof bids === 'string') {
  // 兼容单值、逗号分隔字符串两种情况
  bids = bids.split(',').map(Number);
} else if (Array.isArray(bids)) {
  // 已经解析为数组的情况,统一转数字类型
  bids = bids.map(Number);
}
console.log("bids in bid4post : ", bids, Array.isArray(bids), bids.length);

内容的提问来源于stack exchange,提问作者user938363

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 13:54:04