2014-07-09 81 views
0

在激活之前授權的路由時,哪裏是捕獲未授權401的最佳位置。例如,當授權令牌不再有效時,如果用戶嘗試激活路由,則會發生401錯誤。 Durandal中的異常是在activateItem Level中引發的,不知道如何爲它定義一個全局處理程序。durandal路由器激活器捕獲401例外

注意。 mapUnknownRoutes在這種情況下是沒有用的

+0

什麼會扔401?如果你在生產中,除非你在調試模式下運行,否則你不應該得到401,如果你使用weyland或grunt或者任何構建工具。 –

+0

如果您不再授權調用api,則.NET中的Web API將拋出401。 – ken

+0

當然,但Durandal的路由器不會打電話給API。您將使用jQuery或其他方式來進行調用,以處理失敗場景。我可以發佈一個例子作爲答案。 –

回答

0

您可以從任何地方打電話給您的API。如果你正在使用jQuery調用你會處理AJAX調用的與fail方法失敗 -

$.ajax({ 
    url: url, 
    data: { start: start, end: end }, 
    success: function(data, textStatus, jqXHR) { 
     $('#myElement').append(data); 
    }, 
    error: function(jqXHR, textStatus, errorThrown) { 
     if (jqXHR.status === '401') { 
      // do something 
     } 
    } 
}); 

這給你的狀態代碼,我不記得,如果它是字符串或INT格式雖然所以這僞代碼明顯​​

+0

激活器嘗試激活路由時進行呼叫。我同意你的觀點,路由器的工作在檢測到路由有效的那一刻就完成了。這就是爲什麼我試圖找到一個全局處理程序,當一個模塊的激活失敗,因爲401。 – ken

+0

您可以隨時返回一個承諾,路由器將推遲激活完成,直到承諾解決。如果模塊無法加載,並且你不想用你的調用處理失敗,我想你可以嘗試使用像require.js提供的全局失敗處理程序,但我不確定它是否是正確的用例 - http:// requirejs.org/docs/api.html#requirejsonerror –

+0

這需要專門處理我支持授權的每個模塊中的故障。更希望掛鉤到某處的路由器,以提供全局處理。我認爲理想的地方是在連接到路由器的激活器的activeItem中。儘管如此,我並沒有勾引。也有後衛路特但後來發生異常。 – ken