简体   繁体   中英

Socket.io middlewhere functions

I am trying to seperate logic in my socket.io server but i am experiance some issues.

say for instance i have the following:

    io.on('connection', function (socket) {

    var fileModule = require('./costum_modules/FileModule.js')(io);
    app.use(fileModule);

});

Now inside the fileModule i have the following code:

    var fileModule = function (socket) {

    socket.on('userData', function(msg){
        var i = 0;
    });


}

module.exports = new fileModule();

Sadly the socket i undefined.

My question is can i do it like this or is it not possible to pass a singleton to another file and make it read from the same object?

You can use other files to break up your logic, but there are a couple issues with your code.

First, I think Hacketo is correct that you don't want to do new fileModule() , just:

module.exports = fileModule;

Second, when call require, you are passing the global socketIO object ( io ). You should pass it the socket you get in the connection handler. Eg

require('./costum_modules/FileModule.js')(socket);

I think that will work to move some of your socket.io message handling code into a module. Now your socket will respond to userData messages from a client. However, unless you have some custom application, I don't think app.use is going to do what you expect. You can't hook web socket handlers into an Express/Restify/Connect/Whatever middleware chain. But you could write a middleware that sends a message to your socket server.

If you are just trying to share the session between your app and socket server, try this SO answer .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM