In the Express docs, it says:
Application level middleware are bound to an instance of express, using app.use() and app.VERB().
Router level middleware work just like application level middleware except they are bound to an instance of
express.Router()
. The middleware system created at the application level in the example above, can be replicated at the router level using the following code.
In the app provided by the Express generator, I see in the main app.js
, there is:
var routes = require('./routes/index');
app.use('/', routes);
And in ./routes/index.js
, I see this:
var express = require('express');
var router = express.Router();
/* GET home page. */
router.get('/', function(req, res, next) {
res.render('index', { title: 'Express' });
});
module.exports = router;
What is the purpose of app.use
passing it to router.get
instead of simply using app.get
? And generally, what's the difference between app.VERB
and router.VERB
in terms of routing?
Best Answer
This is all just designing for modularity. It allows an application to be divided into several smaller loosely-coupled pieces and because they all do not have any direct knowledge of the shared
app
instance that combines them together, the modularity is achieved.For example, you could build a whole user account subsystem that handles sign up, login, forgot password, etc, and share it between several different applications by "mounting" it within them via
app.use(require("my-user-system"))
.That's the only purpose behind this. There no functional, technical, or performance difference otherwise.
No difference. The app has it's own main/primary router and
app.VERB
is just convenience sugar for the equivalent ofapp.router.VERB
.