我正在尝试将我的应用程序中的socket.io代码分离到它自己的文件中,就像这个帖子中的答案一样:Separating file server and socket.io logic in node.js
但是,socket.io代码永远不会运行,也不会开始监听,我不明白为什么:
//index.js
kraken.create(app).listen(function (err, server) {
if (err) {
console.error(err);
}
var io = require('./lib/socket').listen(server);
});
//socket.js
var socketio = require('socket.io')
module.exports.listen = function(app) {
return function (req, res) {
io = socketio.listen(app);
io.sockets.on('connection', function (socket) {
socket.on('disconnect', function () {
if (socket.uid !== undefined) {
// do some stuff
}
});
});
return io;
}
};
我最好的猜测是req和res对象不存在,因为它不是请求?问题是我真的需要使用req对象,因为我需要在连接期间访问会话。如果这是问题,怎么能实现呢?
提前感谢你的圣人建议和更好的智慧。
编辑:我看过https://github.com/jfromaniello/passport.socketio这正是我需要的,但我不知道我的会话密钥或秘密是什么。我怎么知道护照?
答案 0 :(得分:3)
你的listen函数只是返回另一个函数而不是实际触发代码来设置socketio来监听。
尝试:
module.exports.listen = function(app) {
io = socketio.listen(app);
io.sockets.on('connection', function (socket) {
socket.on('disconnect', function () {
if (socket.uid !== undefined) {
// do some stuff
}
});
});
return io;
};