【问题标题】:How do i pass req or res object into socket.io?如何将 req 或 res 对象传递到 socket.io?
【发布时间】:2015-11-18 15:28:51
【问题描述】:

我的目标是将对象保存到 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

【问题讨论】:

标签: node.js express socket.io


【解决方案1】:

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

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

但请注意以下几点:

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

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

这是对你有用的东西,但你应该小心使用它:)

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

【讨论】:

    猜你喜欢
    • 2014-05-04
    • 1970-01-01
    • 2012-12-29
    • 2015-09-28
    • 1970-01-01
    • 2016-04-03
    • 1970-01-01
    • 1970-01-01
    • 2014-01-21
    相关资源
    最近更新 更多