【问题标题】:id is not defined (sails.socket.emit)id 未定义(sails.socket.emit)
【发布时间】:2015-04-19 16:42:14
【问题描述】:

我只是想使用sails.socket.emit() 发送消息,我得到了这个:

error: Sending 500 ("Server Error") response:
 Error (SAILS:HOOK:SOCKETS:USAGE):: `sails.sockets.get()` cannot lookup socket w/o an id (got: `undefined`)

控制器中的代码:

sayHiToFriend: function(req, res) {
    var friendId = req.param('id');
    sails.sockets.emit(friendId, 'privateMessage', {from: req.session.userId, msg: 'Hi!'});
    res.json({
      message: 'Message sent!'
    });
}

和客户端:

io.socket.get('/user/sayHiToFriend', function serverSays(err,users){

  console.log('with headers: ', JWR.headers);
  console.log('and with status code: ', JWR.statusCode);*/
        if (err)
            console.log(err)

        console.log(JSON.stringify(users));

});

我必须将 id 作为数据传递给 io.socket.get 吗?如果有怎么办? 编辑:解决方案:

 sails.sockets.emit(sails.sockets.id(req.socket), 'welcome', {custom: 'data here'});

【问题讨论】:

  • 您必须提供您的代码。
  • 修改了我原来的帖子。最初的问题是一些愚蠢的语法问题。但是现在我得到了这个
  • 嗯,看起来有些东西是未定义的,所以它要么是friendId,要么是req.session.userId
  • 对不起,我再次编辑,所以你没有看到我认为的代码的相关部分。好像我可以将数据传递给 io.socket.get。这可以消除错误,但我得到了其他人。我不知道如何正确传递套接字 Id...

标签: node.js sockets undefined sails.js


【解决方案1】:

我遇到了同样的问题。似乎 Sails.js 有一些内部问题或其他我们无法控制的问题……在我的情况下,几个小时前一切正常,现在它给出了该错误。我解决了这个问题,只需用 lodash 压缩 ID 数组:

User.findOne({'id': req.body.id}, function(error, user) {
            var subscribers = _.compact(User.subscribers(user));
            sails.sockets.emit(subscribers, "notification", {msg: req.body.msg});
});

现在一切正常!希望对您有所帮助!

【讨论】: