【问题标题】:Why socket.io removes properties that are equal to undefined为什么 socket.io 会删除等于 undefined 的属性
【发布时间】:2017-12-24 05:06:31
【问题描述】:

我正在尝试使用socket.io-client 发送请求:

socket.emit('eventName', {
  name: 'john doe',
  phone: undefined,
})

问题是服务器端socket.io 收到这个:

socket.on('eventName', obj => {
  console.log(obj) // {name: 'john doe'}
})

所有等于 undefined 的属性都会在某处被删除。

【问题讨论】:

  • 可能是因为JSON.stringify 就是这样做的。

标签: node.js websocket socket.io


【解决方案1】:

如果您想发送空数据,请不要使用 undefined,这意味着您要删除该数据,而是使用这个:

socket.emit('eventName', {
  name: 'john doe',
  phone: '',
})

这样电话仍然被声明,但不是未定义和空的

【讨论】:

    【解决方案2】:

    socket.io 的数据格式是 JSON,JSON format specification 不包括 undefined 值。

    JSON 值可以是 objectarraynumberstringtruefalsenull

    因此,当 socket.io 内部调用 JSON.stringify() 时,它会跳过任何不具有这些有效值之一的属性。

    这是MDN 描述JSON.stringify() 行为的方式:

    如果在转换过程中遇到未定义、函数或符号,则将其省略(在对象中找到时)或审查为 null(在数组中找到时)。 JSON.stringify 也可以在传递“纯”值时返回 undefined,例如 JSON.stringify(function(){}) 或 JSON.stringify(undefined)。

    因此,您需要将要发送的任何属性的值设置为这些有效值之一。在这种特殊情况下,您可以将其设置为 null 或空字符串。

    【讨论】:

    • @stkvtflw - 这能回答你的问题吗?如果是这样,您可以通过单击答案左侧的绿色复选标记向社区表明这一点,这也将为您赢得一些声誉积分。
    猜你喜欢
    • 2022-11-17
    • 1970-01-01
    • 2022-10-13
    • 1970-01-01
    • 2014-06-20
    • 1970-01-01
    • 2020-10-20
    • 2014-04-11
    • 1970-01-01
    相关资源
    最近更新 更多