在app.use中触发函数的顺序

我读过中间件函数按照它们被添加的顺序执行,所以如果我有以下内容:

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

他们以什么顺序执行,为什么如果path是:

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

对于所有的端点:

  1. /
  2. /users
  3. /some

只有第一个函数将被调用原始代码:

 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. 对于/ – function为/然后none
  2. 对于/users – function为/usersnone
  3. 对于/some – 函数为/none和404处理程序

那是因为:

  1. /函数匹配所有的路由
  2. /usersfunction匹配/users但不//some
  3. 没有path意味着/默认,所以它匹配的一切

有关app.usepath匹配的详细信息,请参阅: