2013-07-31 15 views
1

當我在.NET世界,並使用MVC想要做橫切關注點,如日誌記錄,身份驗證,交易管理等,我會用DI配對時使用一個共同的模式與AOP基本上把屬性放在我需要代理/編織的方法上。基於AOP認證即將在ASP.MVC到的NodeJS

所以它可能看起來像:

public class SomeController 
{ 
    [Authenticate] 
    public ActionResult SomeAuthenticatedAction() {} 

    public ActionResult NotAuthenticatedAction() {} 
} 

因此作出以上時SomeAuthenticatedAction被稱爲它會檢查是否有授權cookie請求周圍做一些邏輯,要麼用401或東西出來轟炸用戶。它會知道這樣做,因爲它具有一個屬性,它在運行時知道要掛鉤並進行代理。

現在我在JavaScript的土地,我期待在獲得相同的排序功能,但這樣做是爲了在該平臺的最佳途徑。所以,我想知道我應該如何去有關的NodeJS這樣做,因爲在JavaScript中沒有某種屬性的範式所以沒有任何ingraining認證到每個app.* (get,post etc)電話,我不喜歡,或在應用程序入口點代理每個我認識的行動需要被認證,這也不是理想的。

那麼有沒有辦法讓我指出應該有有一些橫切關注應用到它,而沒有實際上把邏輯放在那裏?因此,Web代碼不知道認證機制,應用程序入口點不知道具體方法,它只是知道它需要所有具有一些元數據的方法?

我希望這是有道理的,就好像你不使用AOP那麼你可能會認爲我在謎語中談話,但這樣做使我的代碼更容易測試和維護,並且還允許我重新配置應用程序很快。

到目前爲止,我發現Hooker,它可以做拼圖的代理部分,雖然不太清楚我將如何獲取其中的底層請求對象,但我不會看到代理JS中的對象太多一個痛苦,但我只需要找到一種方法來確定攔截方法......任何信息都會很好。

== ==編輯

讀了一下後,更可能是什麼樣子我應該使用中間件層做什麼,我需要做,因爲這將至少允許簡單的代碼和路線的意圖會更清晰。一旦我找到更多或更好的答案,將繼續回頭看看。

回答

0

由於沒有答案,我會提到我所做的,這是一個包含需要在路徑上執行的邏輯的類,然後創建了一個導出爲中間件入口點的函數。這樣,我可以單元測試邏輯並使用中間件將「關注」注入該路線。