How do you export a variable from app.js into another route in Node js How do you export a variable from app.js into another route in Node js express express

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);    });});


I think you need to use the sockets.

io.sockets.on('connection', ... ); 


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);    });  });}