How to use node modules and require with Express 4 router

I've used an express 4 generator for node project initiation. It uses a router and I have the following:

// ./routes/index.js

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

router.get('/', function(req, res) {
  res.render('index', { title: 'Express' });
});

module.exports = router;

Now, I want to add the following route within it.

app.post('/login', function(req, res, next) {
    passport.authenticate('local', function(err, user, info) {
        if (err) { return next(err) }
        if (!user) {
            req.flash('error', info.message);
            return res.redirect('/login')
        }
        req.logIn(user, function(err) {
            if (err) { return next(err); }
            return res.redirect('/');
        });
    })(req, res, next);
});

It needs to have access to app and passport I think. Can you please tell me how can the routing file index.js access passport and what should I module.export from this file index.js ?

app.post can be replaced with the router.post as you have already got router module in this script. The change you will have to do is to require the passport module in this page and use it.

could be like

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

router.get('/', function(req, res) {
  res.render('index', { title: 'Express' });
});

router.post('/login', function(req, res, next) {
    passport.authenticate('local', function(err, user, info) {
        if (err) { return next(err) }
        if (!user) {
            req.flash('error', info.message);
            return res.redirect('/login')
        }
        req.logIn(user, function(err) {
            if (err) { return next(err); }
            return res.redirect('/');
        });
    })(req, res, next);
});

module.exports = router;