In Express, what does app.router do exactly?

In Express 3.x, app.router is an enhanced version of the connect middleware router. As hector said, this is where Express handles the request handlers registered with app.get, app.post, etc.

If you do not call app.use(app.router) explicitly then express will call it implicitly the first time you use app.get(...), app.post(...), etc. However, you may want to .use it explicitly, because then you choose the order of all your middleware.

app.use(express.favicon());
app.use(express.bodyParser());
app.use(express.methodOverride());
// app.get, app.post, etc called before static folder
app.use(app.router); 
app.use(express.static(path.join(__dirname, 'public')));

See how the router is retrieved in the Express 3 source here.

Note that Express 4 doesn't need app.router.


This is from the Express 2.x guide http://expressjs.com/2x/guide.html

"Note the use of app.router, which can (optionally) be used to mount the application routes, otherwise the first call to app.get(), app.post(), etc will mount the routes."

I suspect this applies to Express 3.x too.