繁体   English   中英

Angular $ http服务是否对Http错误响应调用$ exceptionHandler

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM