中间件的执行顺序是什么?

时间:2017-02-08 09:56:48

标签: express middleware

我有两条路线。全局变量route内的第一条路线。在启动中间件时,第二条路径也会返回到该全局变量。

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

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

当接下来middlawe执行时,我仍然有第一条路线。 为什么我的第一个middlawe之前没有开始?

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

但是,如果我使用不同的回调设计,则可以获得第二条路线......

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

./路由/ first.js

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

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

module.exports = route;

./路由/ second.js

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

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

module.exports = route;

1 个答案:

答案 0 :(得分:1)

因为它在调用app.use('/api', route);时形成一个闭包。在父函数中更改它时,use函数内的路径不会更改。试试这个

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