[英]Does Angular $http Service Call into the $exceptionHandler on Http Error Responses
我的印象是,有角度的$ http服務內部的請求返回的http錯誤將通過$ exceptionHandler傳遞,但是我看到某些行為使我不以為然。
任何人都可以確認$ http服務是否應在500 http狀態響應代碼的情況下將消息傳遞給$ exceptionHandler?
據我所知,不,它們不會通過異常處理程序。 角度文檔指出:
角度表達式中任何未捕獲的異常都委托給此服務。 默認實現只是將$ log.error委托給瀏覽器控制台。
500錯誤不會被視為未捕獲的異常。 我們使用$ httpProvider攔截響應並自己處理500個代碼。 我們提供了一項服務來處理此功能。
我們的應用程序配置如下所示:
appModule.config(['$routeProvider', '$locationProvider', '$httpProvider', '$provide',
function ($routeProvider, $locationProvider, $httpProvider, $provide) {
// Http interceptor to handle session timeouts and basic errors
$httpProvider.responseInterceptors.push(['httpHandlersSrv', function (httpHandlersSrv) {
return function (promise) { return promise.then(httpHandlersSrv.success, httpHandlersSrv.error); };
}]);
routeProvider = $routeProvider;
$locationProvider.html5Mode(true);
}
]);
這就是我們的$ httpHandlersSrv看起來像處理500個代碼錯誤的地方:
angular.module('appModule').factory('httpHandlersSrv', ['$q', '$location', '$rootScope', 'toaster', '$window', function ($q, $location, $rootScope, toaster, $window) {
return {
success: function (response) {
return response;
},
error: function (response) {
switch (response.status) {
case 0:
//Do something when we don't get a response back
break;
case 401:
//Do something when we get an authorization error
break;
case 400:
//Do something for other errors
break;
case 500:
//Do something when we get a server error
break;
default:
//Do something with other error codes
break;
}
return $q.reject(response);
}
};
}]);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.