【问题标题】:How to emit object using socket.io?如何使用 socket.io 发射对象?
【发布时间】:2017-01-27 23:29:14
【问题描述】:

我有一个类似的代码,我在发送响应时遇到问题。

socket.on('findUserMessages', (userName) => {
    io.sockets.connected[socket.id].emit('Checking-message', {
        type: 'ss',
        text: bot,
        user: 'bot'
    });

    var dupa = db.chat.find({ user: userName }, function(err, docs) {
        userName = userName
        if (err) throw err;
        console.log('load old messages', docs)
    })

    io.emit('private message', dupa);
})

我的节点控制台输出是这样的

[ { _id: 5888bdd6cef7952e38821f35,
text: 'O rajciu rajciu',
user: 'Adam',
time: 2017-01-25T15:01:42.733Z }]

我知道输出不是 JSON 字符串,如何解决?我试图使用 .toArray() 但没有成功。

这可能是个愚蠢的问题,但我坚持了很长时间。

【问题讨论】:

  • 您需要在回调中发出结果。 io.emit('private message', docs);
  • 我不知道从哪里开始。 userName = userName 是做什么的?
  • @Aᴍɪʀ 这个“文档”对象不是有效的 JSON 对象,这是主要问题。
  • @PiotrKaliński docs 是一个对象数组。只要它不包含函数,您就可以通过套接字发送它。您要发送的不是docs。将emit 移动到console.log 之后,并将dupa 替换为docs

标签: javascript json node.js socket.io


【解决方案1】:

在发出结果之前将结果转换为 json。尝试发出JSON.stringify(dupa)

编辑 您的输出实际上已经是 JSON(JSON 数组),因此如果您只想在客户端获取 JSON 字符串,请将您的输出转换为那里的字符串(在客户端接收到发出事件时的JSON.strigify(result))。

【讨论】:

  • 我正在尝试,在浏览器控制台中为空
  • 这不是问题@Arman P。他实际上是在发出null。这是异步函数的返回值。
  • @Aᴍɪʀ 是的,只是注意到他没有从回调中发射。
猜你喜欢
  • 1970-01-01
  • 2013-10-26
  • 2020-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多