Use socket.io inside a express routes file

There is a better way to do this now with Express 4.0.

You can use app.set() to store a reference to the io object.

Base configuration:

var app = require('express')();
var server = app.listen(process.env.PORT || 3000);
var io = require('socket.io')(server);
// next line is the money
app.set('socketio', io);

Inside route or middleware:

exports.foo = function(req,res){
    // now use socket.io in your routes file
    var io = req.app.get('socketio');
    io.emit('hi!');
}

Information about app.set() and app.get() is below:

app.set(name, value)

Assigns setting name to value. You may store any value that you want,
but certain names can be used to configure the behavior of the server.
These special names are listed in the app settings table.

Calling app.set('foo', true) for a Boolean property is the same as
calling app.enable('foo'). Similarly, calling app.set('foo', false)
for a Boolean property is the same as calling app.disable('foo').

Retrieve the value of a setting with app.get().

Source: https://expressjs.com/en/api.html#app.set

Leave a Comment