无法访问session.socket.io中的io对象

时间:2014-02-16 07:19:19

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

我正在使用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

2 个答案:

答案 0 :(得分: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.

答案 1 :(得分:0)

为了让我的应用程序不那么拥挤,我已经更新了socketHandler所以它需要我所有与套接字相关的对象

socketHandler(sessionIO, io)

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