What's the best way to access the express 'app' object from inside a separate route file?

In Express 4, by default, routes are loaded from a separate file:

app.use('/', routes);

Would load routes/index.js.

I have a third-party library that attaches to app itself. Is there a preferred way to access app from inside routes/index.js?

I've thought about dependency injection ie, routes/index.js does

module.exports = function(app){ 
   (routes go here)
}

and then:

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

But I wonder if there's a better way. What's the best way to access the express 'app' object from inside a separate route file?

Answers:

Answer

You can simply access app by req.app in your route handlers

Answer

I looked at a number of app generators and everyone does it differently.

Mostly though I've seen it work the opposite from what you are asking. The route modules do not get the app passed in, they just return themselves and are attached to the app.

I like to use the following pattern:

routers/hello.js:

var express = require('express');
var router = express.Router();
router.get('/hello', function (req, res) {
   res.send('Hello, World!');
});
module.exports = router;

app.js:

var express = require('express');
var app = express();
app.use('/sample', require('./routers/hello'));
// other routers are attached
module.exports = app;

server.js:

var http = require('http');
var app = require('app');
var server = http.createServer(app);
server.listen(3000):

So the modules in routers/ return an Express Router object that are then attached to the app on their respective paths (routes).

This is inspired on the Express Application generator, but uses Routes instead of Routers. My advice, use the linked generator and start from there.

Tags

Recent Questions

Top Questions

Home Tags Terms of Service Privacy Policy DMCA Contact Us Javascript

©2020 All rights reserved.