Search code examples
expressmiddleware

What is the order of execution of middlewares?


I have two routes. First route inside global variable route. In start middleware, second route returns into that global variable also.

var route = require('./routes/first');

app.use(function(req, res, next) {
    route = require('./routes/second');
    next();
});

And when executed next middlawe I still have the first route. Why did my first middlawe does not start before?

// route contain module from './routes/first'
app.use('/api', route);

But, if I use different design of callback, it is possible to get a second route...

// route contain module from './routes/second'
app.use('/api', function (req, res, next) {
    return route(req, res, next);
});

./routes/first.js

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

route.get('/', function(req, res) {
    res.send('First route');
});

module.exports = route;

./routes/second.js

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

route.get('/', function(req, res) {
    res.send('Second route');
});

module.exports = route;

Solution

  • Because it forms a closure when it calls app.use('/api', route); . The route inside the use function does not change when you change it in the parent function. Try this

    app.use(function(req, res, next) {
        route = require('./routes/second');
        app.use('/api', route);
        next();
    });