architecture for modular socket.io in node.js

in a node.js app, let's say i have a app.js like this

var express = require('express')
var app = express();

var server = http.createServer(app);

...

module.exports = {
  app:app,
  server:server
}

also, there is /lib/sockets.js, where all the logic of socket.io should go in. It looks like this:

var server = require('../app.js').server;
var io = require("socket.io").listen(server);

io.sockets.on('connection', function(socket) {
  socket.on('event', function(msg) {
    socket.emit('news', msg});
  });
});

module.exports = io;

Is it good practice to require the server from app.js here? If not, what would be a better solution? thx

Try having your sockets.js file export a function. Then require the sockets file in your app.js and pass in any relevant arguments.

In your lib/sockets.js:

module.exports = function(server){

    var io = require("socket.io").listen(server);

    io.sockets.on('connection', function(socket) {
        socket.on('event', function(msg) {
            socket.emit('news', msg);
        });
    });

    return io;
};

And in your app.js

var express = require("express");
var app = express();

var io = require("./lib/sockets")(app);