How do you export a variable from app.js into another route in Node js
Your dependencies are not set up correctly. You are executing index.js before io is initialized
var routes = require('./routes/index');/* index.js starts being executed at this point * hence, io is undefined inside index.js */
Instead, why don't you try
app.js
var app = require('express')();var server = require('http').Server(app);var io = require('socket.io')(server);server.listen(4000);module.exports = io;var routes = require('./routes/index');var users = require('./routes/user');
index.js
var io = require('../app');io.on('connection', function (socket) { socket.emit('news', { hello: 'world' }); socket.on('my other event', function (data) { console.log(data); });});
It looks like a circular dependency (app.js requires index.js and index.js requires app.js)
Try this.
change app.js to:
var express = require('express');var path = require('path');var favicon = require('serve-favicon');var logger = require('morgan');var cookieParser = require('cookie-parser');var bodyParser = require('body-parser');var users = require('./routes/user');var app = require('express')();var server = require('http').Server(app);var io = require('socket.io')(server);server.listen(4000);require('./routes/index')(io);// view engine setupapp.set('views', path.join(__dirname, 'views'));app.set('view engine', 'jade');// app.use(favicon(__dirname + '/public/img/favicon.ico'));app.use(logger('dev'));app.use(bodyParser.json());app.use(bodyParser.urlencoded({ extended: true}));app.use(cookieParser());app.use(express.static(path.join(__dirname, 'public')));app.use('/users', users);/// catch 404 and forward to error handlerapp.use(function(req, res, next) { var err = new Error('Not Found'); err.status = 404; next(err);});/// error handlers// development error handler// will print stacktraceif (app.get('env') === 'development') { app.use(function(err, req, res, next) { res.status(err.status || 500); res.render('error', { message: err.message, error: err, title: 'error' }); });}// production error handler// no stacktraces leaked to userapp.use(function(err, req, res, next) { res.status(err.status || 500); res.render('error', { message: err.message, error: {}, title: 'error' });});/* io.on('connection', function (socket) { socket.emit('news', { hello: 'world' }); socket.on('my other event', function (data) { console.log(data); }); }); */module.exports = app;
change index.js to:
module.exports = function(io){ io.on('connection', function (socket) { socket.emit('news', { hello: 'world' }); socket.on('my other event', function (data) { console.log(data); }); });}