2013-12-18 58 views
2

我有一個簡單的應用程序,建立在node.js和express的幫助下。這個應用程序有多個路線和基本的登錄/註銷機制。如果用戶未登錄,我希望所有路由都重定向到登錄表單。這可以通過在每個路由文件中插入auth檢查器行來完成。快遞鏈接

的問題是: 是否有可能鏈,推動通過登錄檢查所有請求路由,然後把它傳遞給請求一個沒有任何內容寫入現有航線的文件路徑?

E.g.現有路由是「/」,「/ upload」,「/ login」,「/ logout」。 我想請求得到「/上傳」首先處理「/登錄」路線,然後通過「上傳」路線。

回答

2

是的,你可以鏈接處理程序的路線。你的處理程序定義應該是這樣

routehandler(req, res, next){ 
    //send response directly 
    //or call next to call the next handler 
} 

你可以再放入多個處理程序在你想要的順序:

app.get('/server', ensureAuthenticated, housekeeping, routes.server.get) 

這裏ensureAuthenticatedhousekeeping不發送響應就叫next()。最後一個返回結果頁面。

請參閱您希望使用不同於您用於登錄的處理程序。登錄頁面將執行身份驗證,其餘頁面應該檢查用戶是否已通過身份驗證。如果您使用會話,這種差異將會很明顯。


路由處理程序的參數與中間件的參數相同。這些是:

  1. (ERR,REQ,RES,下一個)錯誤處理程序
  2. (REQ,RES,下)非錯誤處理

的上方的瑣碎變型是next可以是如果它是您想要的回調鏈中的最終功能,則省略。你不能有其他的參數。你可以看到他們如何被稱爲here(154行)。一個路由由方法,路由匹配和回調數組組成。與中間件一樣,回調鏈按順序執行特定路由,直到返回響應或引發錯誤。

+0

謝謝,你能解釋一下,routehandler在哪裏得到它的參數(req,res,next等)。我不會將它們傳入代碼的任何部分。我可以稱之爲'routehandler(next,req,err,res)'嗎? – Schtz

+0

@Schtz更新了答案。 – user568109

+0

非常感謝。還需要學習。 – Schtz