How to emit an event in socket.io from the routes file? How to emit an event in socket.io from the routes file? express express

How to emit an event in socket.io from the routes file?


First you need to decide that what socket you want to send the new info. If it's all of them(to everyone connected to your app), it would be easy, just use io.sockets.emit:

In the ./socket.io file you add exports.sockets = io.sockets; somewhere after io = socketio.listen(app);. Then in the routes file, you can emit like this:

var socketio = require('./socket.io');socketio.sockets.emit('new account created', result);

If you know the socket id that you want to send to, then you can do this:

var socketio = require('./socket.io');socketio.sockets.sockets[socketId].emit('new account created', result);

You can also select the socket by express session id:

First you need to attach the session id to the socket on authorization:

io.set('authorization', function (data, accept) {    // check if there's a cookie header    if (data.headers.cookie) {        // if there is, parse the cookie        data.cookie = cookie.parse(data.headers.cookie);        // note that you will need to use the same key to grad the        // session id, as you specified in the Express setup.        data.sessionID = data.cookie['express.sid'];    } else {       // if there isn't, turn down the connection with a message       // and leave the function.       return accept('No cookie transmitted.', false);    }    // accept the incoming connection    accept(null, true);});

Then you can select sockets with the session id:

var socketio = require('./socket.io');var sockets = socketio.sockets.forEach(function (socket) {    if (socket.handshake.sessionID === req.sesssionID)        socket.emit('new account created', result);});

You can also query your session store and using the method I described above, emit the event to sockets with sessionId that matched your query.