2014-01-24 29 views
0

中找到最初匹配的路線。我需要在請求時恢復原始路線。無論是原始的:可變字符串還是正則表達式。基本上我希望有一些密鑰將所有請求分組到一個通用的高級預處理器中,並將這些請求分組到同一路由。如何在請求時在Express.Js

問題是我的路由與嵌套的應用和路由器相當複雜,所以app.routes.map不包含路由。

有沒有一種方法可以對來自請求對象的路由進行反向工程,或者是否有一個地方可以獲得我可以匹配和搜索當前請求的全局路由列表?

+0

從console.dir輸出(Object.keys(REQ))是: '[ '_readableState', '可讀', '域', '_events', '_maxListeners', '插座' , '連接', 'httpVersion', '完整的', '報頭', '拖車', '_pendings', '_pendingIndex', 'URL', '方法', '的StatusCode' , 'client', '_consuming', '_dumped', 'httpVersionMajor', 'httpVersionMinor', '升級', 'originalUrl', '_parsedUrl', '查詢', '資源', '下一步']' – Killroy

回答

1

具體路線應在req.routedocs)中提供。它包含幾個屬性,包括req.route.regexp(路由的編譯正則表達式)和req.route.params(匹配參數的數組)。

編輯:直到請求被分派之後纔會連接該路由。

聽起來好像你正在試圖預測它在發送之前的路線。在這種情況下,使用app.routes可能正常工作。問題是你有自己的路由器的子應用程序。 app.routes只包含頂級app的路由,不包含任何子應用。

答案是:路線沒有全局視圖。您的子應用程序看起來完全像中間件到父應用程序。它不知道或不在意那裏有路由。

如果您需要執行此操作,則必須手動執行此操作,例如,在註冊您的子應用程序時創建一個全局數組。

+0

req.route是不確定的。我在app.use處理程序中執行此操作,但此應用程序不直接包含路由。它們使用新的express.Router()和app.use(...,router.middleware)從單獨的路由器加載; – Killroy

+0

@Killroy,如果您在分派路線之前試圖弄清路線,則無法自動執行此操作。你必須手動跟蹤它們。查看更新的答案。 – Nate

+1

這是我最後的工作。我想知道是否有一種方法可以在手動執行一些操作之前在URL上運行路由過程。 – Killroy