app.use中触发函数的顺序

时间:2016-12-29 16:28:33

标签: node.js express

我已经读过中间件函数按添加顺序执行,所以如果我有以下内容:

app.use('/', function () {
    console.log('/');
    next();
});

app.use('/users', function () {
    console.log('/users');
    next();
});

app.use(function () {
    console.log('none');
    next();
});

他们执行的顺序是什么,为什么路径是:

  1. /
  2. /用户
  3. /一些

1 个答案:

答案 0 :(得分:1)

对于所有端点:

  1. /
  2. /users
  3. /some
  4. 只会为原始代码调用第一个函数:

    app.use('/', function (req, res, next) {
        console.log('/');
    });
    
    app.use('/users', function (req, res, next) {
        console.log('/users');
    });
    
    app.use(function (req, res, next) {
        console.log('none');
    });
    

    那是因为你没有使用next()。但如果你有:

    app.use('/', function (req, res, next) {
        console.log('/');
        next();
    });
    
    app.use('/users', function (req, res, next) {
        console.log('/users');
        next();
    });
    
    app.use(function (req, res, next) {
        console.log('none');
        next();
    });
    

    然后:

    1. 适用于/ - /的功能,然后是none
    2. /users - /usersnone
    3. 的功能
    4. /some - /none的功能以及404处理程序
    5. 那是因为:

      1. /函数匹配所有路由
      2. /users功能匹配/users但不匹配//some
      3. 默认情况下,路径不是/,因此它匹配所有内容
      4. 有关app.use的路径匹配的详细信息,请参阅: