當我在.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中的對象太多一個痛苦,但我只需要找到一種方法來確定攔截方法......任何信息都會很好。
== ==編輯
讀了一下後,更可能是什麼樣子我應該使用中間件層做什麼,我需要做,因爲這將至少允許簡單的代碼和路線的意圖會更清晰。一旦我找到更多或更好的答案,將繼續回頭看看。