将socket.io作为KrakenJS / Express中的模块加载

时间:2014-03-01 21:37:22

标签: node.js express socket.io kraken.js

我正在尝试将我的应用程序中的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这正是我需要的,但我不知道我的会话密钥或秘密是什么。我怎么知道护照?

1 个答案:

答案 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;
};

这是另一个例子: https://github.com/paypal/kraken-js/issues/39