如何将req或res对象传递给socket.io?

时间:2015-11-18 06:42:01

标签: node.js express socket.io

我的目标是将对象保存到req.user数据库。因此,情况是,每当socket.io收到某些内容时,它将保存到req.user数据库。

这是代码。

io.on('connection', function(socket){
  socket.on('notify', function(msg){
    User.findById(req.user._id, function(err, found) {

      found.notifications.push(msg);
      found.save(function(err) {

        io.emit('notify', msg);
      });
    });

  });
});

但是我收到了这个错误,

Missing error handler on `socket`.
ReferenceError: req is not defined

1 个答案:

答案 0 :(得分:-1)

每个Socket.IO连接都注入了request属性,但它是进行握手的属性。您可以使用它:

socket.on('notify', function(msg) {
    User.findById(socket.request...

但请注意以下几点:

您的用户必须在握手发生时进行身份验证。

如果会话和内容中发生任何事情,它们将不会被更新,因为请求只是被注入而且它不会改变它的状态。如果你使用单个页面应用程序只有一个请求,并且那里有套接字 - 它应该没问题,但如果你使用多个页面,这将是一个巨大的风险。

这件事对你有用,但你应该小心使用它:)

https://www.npmjs.com/package/express-socket.io-session