Sharing socket.io to other modules gives empty object

Viewed 8324

I am trying to share socket.io's socket object in different node.js modules although I fail and get empty object with

Cannot call method 'on' of undefined

My code :

app.js

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

var server = require('http').createServer(app)
  , io = require('socket.io').listen(server)

var routes = require('./routes')
  , path = require('path')
  , rss = require('./routes/rss')

// ...

exports.io = io;

routes/rss.js

io = require(__dirname + '/../app');

console.log(io);
io.sockets.on('connection', function(
  console.log("Connection on socket.io on socket");
  // .. do stuff 
});

That's the output I get from this :

$ node app.js                                                                                                    
   info  - socket.io started
{}

/home/XXX/programming/nodejs/node-express-aws/routes/rss.js:10
io.sockets.on('connection', function(socket){
           ^
TypeError: Cannot call method 'on' of undefined
    at Object.<anonymous> (/home/XXX/programming/nodejs/node-express-aws/routes/rss.js:10:12)
    at Module._compile (module.js:456:26)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Module.require (module.js:364:17)
    at require (module.js:380:17)
    at Object.<anonymous> (/home/XXX/programming/nodejs/node-express-aws/app.js:9:10)
    at Module._compile (module.js:456:26)
    at Object.Module._extensions..js (module.js:474:10)

Although I have tried and I can do the same with socket.io only in one (app.js) file

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

var server = require('http').createServer(app)
  , io = require('socket.io').listen(server)

var routes = require('./routes')
  , path = require('path')
  , rss = require('./routes/rss')

// ...

io.sockets.on('connection', function(socket){
  logger.debug("Connection on socket.io on socket");
  socket.emit('news', {will: 'be recived'});
});
2 Answers
Related