Socket emit发送数组仅首个对象被接收 其余字段丢失如何解决
问题原因
- 你编写的传输数据结构本身存在逻辑错误:JavaScript中数组仅用于存放按索引排序的有序元素,你给出的写法本质是给数组对象挂载自定义属性,而非向数组中添加元素。
错误结构示例:
[ { userid: 1, usertag: "random" } name: "cool", age: 10 ]
- Socket.IO的emit操作默认采用JSON标准序列化数据,JSON序列化数组时仅会处理索引对应的元素,会自动忽略数组挂载的非索引自定义属性,因此服务端只能拿到第一个对象元素,name、age属性会直接丢失。
解决方案
根据你的业务需求选择对应修改方案即可:
方案1:使用数组承载所有数据
将name、age相关内容也封装为独立的数组元素,元素之间用逗号分隔:
const sendData = [ { userid: 1, usertag: "random" }, { name: "cool", age: 10 } ]
方案2:使用对象承载结构化数据(更推荐)
如果数据包含不同类型的固定字段,优先用普通对象承载所有内容,更符合结构化数据的传输规范:
const sendData = { userList: [ { userid: 1, usertag: "random" } ], name: "cool", age: 10 }
修改数据结构后再执行emit操作,服务端即可正常接收所有字段。
内容的提问来源于stack exchange,提问作者datamonkey
相关产品推荐
相关产品推荐

