订购

2016-12-29 100 views
1

我读过的中间件功能在加入他们的顺序执行,所以如果我有以下几点:订购

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

对于所有端点:

  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'); 
}); 

这是因为你没有你se 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. 对于/some功能 - 功能/none和404处理程序

这是因为:

  1. /功能相匹配的所有路由
  2. /users匹配功能/users但不//some
  3. 没有路径默认情况下是指/所以它匹配一切

有关的app.use路径匹配详见:

+0

谢谢,对不起,我当然想用'下一个()'在我的例子,我会更新。你能否在你的答案中添加细节? –

+0

@Maximus我更新了我的答案和更多细节。 – rsp

+0

谢谢,_no路径意味着/默认情况下它匹配everything_ - 它是否适用于'app.use('''和'app.use(function(){}'? –