0

My server.js is:

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

var login = require('login');
app.use('/login', login);

In my login.js:

var express = require('express');
var router = express.Router();

router.get('/', function(req, res) {
    res.render('login.jade');
});

module.exports = router;

How can I pass the app object in server.js to the scope of login.js?

Can I just instantiate var app = express(); in login.js and use that instead? Will then there be two different instances of app?

Old Geezer
  • 14,854
  • 31
  • 111
  • 198
  • 1
    Related: [Express: How to pass app-instance to routes from a different file?](http://stackoverflow.com/questions/10090414/express-how-to-pass-app-instance-to-routes-from-a-different-file) – Josh Crozier Feb 13 '17 at 17:13
  • Thanks. This is exactly what I was seeking. Tested and it worked! – Old Geezer Feb 14 '17 at 01:21

3 Answers3

2

You can either export it on server.js or make it a global or pass it as a parameter.

export app;
import { app } from './server';

or

global.app = app;

or:

app.use('/login', login(app));

login.js

function(app) {
   // login stuff here
}
zurfyx
  • 31,043
  • 20
  • 111
  • 145
2

in ES6(ecmascript6):

server.js
export const app = express()

login.js
import { app } from '../server'

in ES5:

server.js
module.exports: {
  app: express()
}

login.js
var app = require('path').app
Robsonsjre
  • 1,586
  • 11
  • 17
1

In your server.js just use require('login')(app);

In your login.js:-

module.exports = function (app) {
    app.get('/', function(req, res) {
        res.render('login.jade');
    });
};
vikas
  • 1,000
  • 9
  • 19