JScott
JScott

Reputation: 33

How to efficiently separate routing code

Dumb/Newb question...

I am learning/working on an API in Node / Express4 and I would like to break my routes out into another module. I have it working with the following code, but it seems awkward to me to keep re-using the require('express') statement... Is there a way to move more of the code from the routes.js file into server.js and still keep my .get and .post statements in the routes module? Thanks in advance!

server.js:

'use strict';
var express = require('express');
var routes = require('./routes');

var app = express();

app.use('/api', routes);

app.listen(3000, function() {
    console.log('Listening);
});

routes.js

var express = require('express'); // how do I get rid of this line?
var router = express.Router(); // can I move this to server.js?

var apiRoute = router.route('');

apiRoute.get(function (req, res) {
    res.send('api GET request received');
});

module.exports = router; 

Upvotes: 3

Views: 677

Answers (1)

agconti
agconti

Reputation: 18133

Your on the right track. Its actually cool to reuse the var express = require('express'); statement each time you need it. Importing, ( requiring ), modules is a cornerstone of modular development and allows you to maintain a separation of concerns with in the files of your project.

As far as modularly adding routes is concerned: The issue is that routes.js is misleading.

In order to modularly separate out your routes you should use several modules named <yourResource>.js. Those modules would contain all of the routing code as well as any other configuration or necessary functions. Then you would attach them in app.js with:

var apiRoute = router.route('/api');
apiRoute.use('/<yourResource', yourResourceRouter);

For example, if you had a resource bikes:

In app.js or even a module api.js:

var apiRoute = router.route('/api')
  , bikeRoutes = require('./bikes');
apiRoute.use('/bikes', bikeRoutes);

Then in bike.js:

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

var bikeRoutes = router.route('/');

bikeRoutes.get(function (req, res) {
    res.send('api GET request received');
});

module.exports = bikeRoutes; 

From there its easy to see that you can build many different resources and continually nest them.

Upvotes: 3

Related Questions