2017-08-10 97 views
0

可以根據多種模式檢查express.js路由嗎?考慮下面所有的路線都是*req.route在這裏匹配*。我想在同一個回調中檢查幾條特殊情況下的路由,而不是在另一個alluse中間件內。Express.js:匹配所有的路由

app.all('*', (req, res, next) => { 
    // How do I check if route is a special case like below 
    if(req.route in ['/foo/:param', '/bar/:param']){} 
}) 

回答

0

因此,您不應該嘗試使用通配符捕獲所有內容,而不是查找特定值。相反,創建一個端點來查找這些特定值,然後使用另一條路由來捕獲所有通配符。

app.get(['/test', '/another_value'], (req, res, next) => { 

}) 
+0

也許我不清楚。我需要像我的代碼所暗示的那樣在一個'catch-all'中檢查它。我的'catch-all'需要執行身份驗證,但忽略了一些路徑。 –

1

我不知道爲什麼你解僱獨立.all路線這一點,因爲在我看來是執行這些檢查的最佳方式:

app.all('/foo/:param', (req, res, next) => { 
    req.isFoo = true; 
    next(); 
}); 

app.all('/bar/:param', (req, res, next) => { 
    req.isBar = true; 
    next(); 
}); 

app.all('*', (req, res, next) => { 
    if (req.isFoo || req.isBar) { ... } 
}) 

或者類似於克里斯的回答,有一條路線可以匹配:

app.all([ '/foo/:param', '/bar/:param' ], (req, res, next) => { 
    req.isSpecial = true; 
    next(); 
}); 
+0

謝謝羅伯特。這就是我最終要做的。希望有一種'express.matches'能夠避免另一個'all'路線。 –

+0

@AnshulKoka有你可以使用的模塊(比如['path-to-from-params'](https://github.com/dhoulb/path-to-from-params)),但是我認爲有單獨的' app.all()'處理程序更清潔。 – robertklep