訂購

2016-12-29 162 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(){}'? –