How to export all routes to Express?

I have a NodeJS Express application that gets really big in just one file (app.js).

I want to export all my routes to one external file, say ./lib/routes.js . How to do it?

How to export the next bit of code and use it correctly in the main app.js ?

 app.get('/logout', function(req, res) { res.render('logout', { username: req.session.username }); }); app.get('/dashboard', function(req, res) { res.render('dashboard', { username: req.session.username }); }); app.get('/login', function(req, res) { res.render('login', { badLogin: false, loginError: false }); }); 
+7
source share
3 answers

Why not do something like this:

 // logout.js module.exports = function(req, res){ res.render('logout', { username: req.session.username }); }); // dashboard.js module.exports = function(req, res){ res.render('dashboard', { username: req.session.username }); }); // login.js module.exports = function(req, res){ res.render('login', { badLogin: false, loginError: false }); }); // app.js app.get('/logout', require('logout')); app.get('/dashboard', require('dashboard')); app.get('/login', require('login')); 

In addition, you can easily imagine using http://nodejs.org/docs/v0.4.8/api/fs.html#fs.readdir to scroll through the route directory and load them programmatically.

You can even do something like ...

 module.exports.handler[] = { method : 'get', route : '/login', action : res.render('login', { badLogin: false, loginError: false }); } 

Although I think I would spend a little time on how to simplify this.

+6
source

What I am doing is grouping my routes with a controller. For each group of related routes (users, shopping carts, whatever), I create a controller file that lives in app/controllers/foo.js , where foo is the name of the controller. In my main javascript server file (where all your code currently lives), I require each controller by name and then call its setup function, passing in my express app object and letting the controller add all the routes needed.

 ['api', 'authorization', 'users', 'tests'].map(function(controllerName) { var controller = require('./controllers/' + controllerName); controller.setup(app); }); 

Inside each controller, I am doing something like:

 exports.setup = function(app) { app.get('/dashboard', function(req, res) { res.render('dashboard', { username: req.session.username }); }); }; 
+20
source

using glob, you can export all the routes in the directory, for example, "/ route":

npm i --save the ball

 // *** /routes/index.js file *** const express = require('express') const Router = express.Router const router = Router() const glob = require('glob') /** * options ignore files inside routes folder */ const options = { ignore: ['${__dirname}/_helpers.js', '${__dirname}/index.js'] } /** * read all files on current directory and export routes as lowercase of the filename * example 'routes/Products.js' route will be access by '/products' */ const routes = glob.sync(__dirname + '/*.js', options) .map(filename => { const arr = filename.split('/') let name = arr.pop(); name = name.replace('.js', '') return { path: '/${name.toLowerCase()}', router: require('${filename.replace('.js', '')}') } }) .filter(obj => Object.getPrototypeOf(obj.router) == Router) .forEach(obj => router.use(obj.path, obj.router)) module.exports = router; 

then

on app.js

 // app.js file const express = require('express') const routes = require('./routes') const app = express() app.use('/api', routes) 
0
source

All Articles