Wednesday, 7 June 2017

How to split a routes.js that grows too large to be easily maintained?

I'm using node and express to create a rest api. I followed a tutorial where all the routes and its logic are saved in a routes.js file like this:

SERVER JS:

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

(...)

require('./app/routes.js')(app, port, express); 

ROUTES.JS

module.exports = function(app, port, express) {


  var apiRoutes = express.Router(); 

(...)

//Sample route 

  apiRoutes.get('/userfiles', function(req, res) {
    UserFile.find({ owner: req.decoded.user.email }, function(err, filesList) {
      if (err)
        return done(err);
      res.json({ success: true, files: filesList });
    });
  });

My problem is twofold:

1 - Routes can easily contain code thats 150 lines long, some of them far longer. It doesn't feel clean to have route declarations and the logic grouped together. Is it a good practice to do something like this instead?

apiRoutes.post('/randomRoute', function(req, res) {
    return res.json(functionThatContainsTheActualCode(req));
  });

(and then have an functionThatContainsTheActualCode function with all the logic in a different file).

2 - I have middleware that applies to some functions (for example, some routes are only accessible for logged in users and those routes go through an authentication middleware). Currently way I do it is declaring public routes before the middleware declaration and private routes after, which feels incredibly hacky. How can I separate public and private routes (and the middleware itself) in different files?



via kace91

No comments:

Post a Comment