Export socket.io connection to another controller?

Issue

I am trying to export a Socket.IO connection created in my bin file to different controllers.

Code

var app = require('../app');
var debug = require('debug')('userservice:server');
var http = require('http');

/**
 * Get port from environment and store in Express.
 */

var port = normalizePort(process.env.PORT || '3015');
app.set('port', port);

/**
 * Create HTTP server.
 */

var server = http.createServer(app);
var io = require('socket.io')(server);
io.on('connection', (socket) => {
  console.log('Connection made #######################################################.', socket.id);
  socket.on('disconnect', () => {
    console.log('Connection disconnected @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.', socket.id);
  });
});
/**
 * Listen on provided port, on all network interfaces.
 */

server.listen(port);
server.on('error', onError);
server.on('listening', onListening);

Answer

To export the io object to different controllers, you can create a new module, let’s call it socket.js, and export the io object from there. Then, you can simply require this module in any controller where you need access to the io object.

Here’s an example of how you can create the socket.js module:

var app = require('../app');
var http = require('http');
var debug = require('debug')('userservice:server');
var socketIO = require('socket.io');

var server = http.createServer(app);
var io = socketIO(server);

io.on('connection', (socket) => {
  console.log('Connection made #######################################################.', socket.id);
  socket.on('disconnect', () => {
    console.log('Connection disconnected @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.', socket.id);
  });
});

module.exports = io;

Then, in any controller where you need access to the io object, you can simply require the socket.js module:

var io = require('./path/to/socket.js');

// Now you can use the io object in this controller
io.emit('someEvent', someData);