【问题标题】:Cannot access io object in session.socket.io无法访问 session.socket.io 中的 io 对象
【发布时间】:2014-03-15 12:44:02
【问题描述】:

我在我的应用中使用session.socket.io

o = require('socket.io').listen(tmpServer),
appCookieParser = express.cookieParser(settings.cookie.secret),
appRedisStore = new RedisStore(),
sessionIO = new SessionSockets(io, appRedisStore, appCookieParser

App.app.use(appCookieParser)
App.app.use(express.session({
    store: appRedisStore
}))

请注意,App 是一个全局变量,其中包含我的一些应用数据和一些辅助函数,因为我遵循了LearnAllTheNodes 应用程序结构。

然后我在connection上定义回调

sessionIO.on('connection', socketHandler)

其中socketHandlerrequire 调用返回的函数。

module.exports = function(err, socket, session) {
   console.log(io.sockets.clients('a'))
   socket.join('a')
   console.log(io.sockets.clients('a'))
}

根据documentation,我应该可以访问我的io 对象,但我总是收到io 未定义的错误。

请注意,如果我在sockatHandler 中发出某些事件或监听某些事件,我将正确获取/发送它们。只是我无法访问io

更新

事实证明,如果我将回调函数作为匿名函数来实现,它就可以完美运行。文档比较混乱,应该是:如果有参考可以使用io

【问题讨论】:

    标签: node.js sockets session express socket.io


    【解决方案1】:

    您似乎忘记定义io,这里应该是监听器。

    根据您显示的代码,您可能应该有类似

    var app = express();
    var server = http.createServer(app);
    var io = socketio.listen(server); 
    

    Here's an example of a complete application using express, socket.io and session.socket.io.

    【讨论】:

    • 我没有发布我所有的应用代码。但我会更新它。我没有忘记。
    • 谢谢,很好的例子:)
    【解决方案2】:

    为了让我的应用不那么拥挤,我更新了socketHandler,所以它会占用我所有与套接字相关的对象

    socketHandler(sessionIO, io)
    

    我正在通过这些对象处理另一个模块中的套接字操作。

    【讨论】:

    • 看看我的例子,这正是我所做的(见there)。
    猜你喜欢
    • 1970-01-01
    • 2017-05-23
    • 1970-01-01
    • 2017-08-13
    • 1970-01-01
    • 2020-07-31
    相关资源
    最近更新 更多