I am trying to pass a socket.io socket socket.io to different node.js modules, although I fail and get an empty object with
Cannot call method 'on' of undefined
My code is:
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')
<strong> 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 });
What 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 tried, and I can do the same with socket.io only one file (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') // ... io.sockets.on('connection', function(socket){ logger.debug("Connection on socket.io on socket"); socket.emit('news', {will: 'be recived'}); });
Patryk
source share