Imagine the original app.js is this long file, how to split app.js of express into smaller files is as following
var http = require('http'), path = require('path'), methods = require('methods'), express = require('express'), bodyParser = require('body-parser'), session = require('express-session'), cors = require('cors'), passport = require('passport'), errorhandler = require('errorhandler'), mongoose = require('mongoose'); var isProduction = process.env.NODE_ENV === 'production'; // Create global app object var app = express(); var router = app.Router(); app.use(cors()); // Normal express config defaults app.use(require('morgan')('dev')); app.use(bodyParser.urlencoded({ extended: false })); app.use(bodyParser.json()); app.use(require('method-override')()); app.use(express.static(__dirname + '/public')); app.use(session({ secret: 'conduit', cookie: { maxAge: 60000 }, resave: false, saveUninitialized: false })); if (!isProduction) { app.use(errorhandler()); } if(isProduction){ mongoose.connect(process.env.MONGODB_URI); } else { mongoose.connect('mongodb://localhost/conduit'); mongoose.set('debug', true); } var passport = require('passport'); var LocalStrategy = require('passport-local').Strategy; var mongoose = require('mongoose'); var User = mongoose.model('User'); passport.use(new LocalStrategy({ usernameField: 'user[email]', passwordField: 'user[password]' }, function(email, password, done) { User.findOne({email: email}).then(function(user){ if(!user || !user.validPassword(password)){ return done(null, false, {errors: {'email or password': 'is invalid'}}); } return done(null, user); }).catch(done); })); router.get('/user', auth.required, function(req, res, next){ User.findById(req.payload.id).then(function(user){ if(!user){ return res.sendStatus(401); } return res.json({user: user.toAuthJSON()}); }).catch(next); }); router.put('/user', auth.required, function(req, res, next){ User.findById(req.payload.id).then(function(user){ if(!user){ return res.sendStatus(401); } // only update fields that were actually passed... if(typeof req.body.user.username !== 'undefined'){ user.username = req.body.user.username; } if(typeof req.body.user.email !== 'undefined'){ user.email = req.body.user.email; } if(typeof req.body.user.bio !== 'undefined'){ user.bio = req.body.user.bio; } if(typeof req.body.user.image !== 'undefined'){ user.image = req.body.user.image; } if(typeof req.body.user.password !== 'undefined'){ user.setPassword(req.body.user.password); } return user.save().then(function(){ return res.json({user: user.toAuthJSON()}); }); }).catch(next); }); /// catch 404 and forward to error handler app.use(function(req, res, next) { var err = new Error('Not Found'); err.status = 404; next(err); }); /// error handlers // development error handler // will print stacktrace if (!isProduction) { app.use(function(err, req, res, next) { console.log(err.stack); res.status(err.status || 500); res.json({'errors': { message: err.message, error: err }}); }); } // production error handler // no stacktraces leaked to user app.use(function(err, req, res, next) { res.status(err.status || 500); res.json({'errors': { message: err.message, error: {} }}); }); // finally, let's start our server... var server = app.listen( process.env.PORT || 3000, function(){ console.log('Listening on port ' + server.address().port); });
Split passport and routes
var http = require('http'), path = require('path'), methods = require('methods'), express = require('express'), bodyParser = require('body-parser'), session = require('express-session'), cors = require('cors'), passport = require('passport'), errorhandler = require('errorhandler'), mongoose = require('mongoose'); var isProduction = process.env.NODE_ENV === 'production'; // Create global app object var app = express(); app.use(cors()); // Normal express config defaults app.use(require('morgan')('dev')); app.use(bodyParser.urlencoded({ extended: false })); app.use(bodyParser.json()); app.use(require('method-override')()); app.use(express.static(__dirname + '/public')); app.use(session({ secret: 'conduit', cookie: { maxAge: 60000 }, resave: false, saveUninitialized: false })); if (!isProduction) { app.use(errorhandler()); } if(isProduction){ mongoose.connect(process.env.MONGODB_URI); } else { mongoose.connect('mongodb://localhost/conduit'); mongoose.set('debug', true); } require('./config/passport'); app.use(require('./routes')); /// catch 404 and forward to error handler app.use(function(req, res, next) { var err = new Error('Not Found'); err.status = 404; next(err); }); /// error handlers // development error handler // will print stacktrace if (!isProduction) { app.use(function(err, req, res, next) { console.log(err.stack); res.status(err.status || 500); res.json({'errors': { message: err.message, error: err }}); }); } // production error handler // no stacktraces leaked to user app.use(function(err, req, res, next) { res.status(err.status || 500); res.json({'errors': { message: err.message, error: {} }}); }); // finally, let's start our server... var server = app.listen( process.env.PORT || 3000, function(){ console.log('Listening on port ' + server.address().port); });
var passport = require('passport'); var LocalStrategy = require('passport-local').Strategy; var mongoose = require('mongoose'); var User = mongoose.model('User'); passport.use(new LocalStrategy({ usernameField: 'user[email]', passwordField: 'user[password]' }, function(email, password, done) { User.findOne({email: email}).then(function(user){ if(!user || !user.validPassword(password)){ return done(null, false, {errors: {'email or password': 'is invalid'}}); } return done(null, user); }).catch(done); }));
var mongoose = require('mongoose'); var router = require('express').Router(); var passport = require('passport'); var User = mongoose.model('User'); var auth = require('../auth'); router.get('/user', auth.required, function(req, res, next){ User.findById(req.payload.id).then(function(user){ if(!user){ return res.sendStatus(401); } return res.json({user: user.toAuthJSON()}); }).catch(next); }); router.put('/user', auth.required, function(req, res, next){ User.findById(req.payload.id).then(function(user){ if(!user){ return res.sendStatus(401); } // only update fields that were actually passed... if(typeof req.body.user.username !== 'undefined'){ user.username = req.body.user.username; } if(typeof req.body.user.email !== 'undefined'){ user.email = req.body.user.email; } if(typeof req.body.user.bio !== 'undefined'){ user.bio = req.body.user.bio; } if(typeof req.body.user.image !== 'undefined'){ user.image = req.body.user.image; } if(typeof req.body.user.password !== 'undefined'){ user.setPassword(req.body.user.password); } return user.save().then(function(){ return res.json({user: user.toAuthJSON()}); }); }).catch(next); });