ngResource的全局错误处理

时间:2015-09-30 08:26:14

标签: javascript angularjs angularjs-ng-resource

我正在寻找一种方法来处理我所有基于ngResource的服务的网络相关错误。

From this answer我知道我可以为单个资源中的所有操作定义自定义拦截器。是否可以修改angularjs创建的默认操作并在那里传递自定义拦截器?

2 个答案:

答案 0 :(得分:1)

这是我的解决方案:

angular.module('server-error', [])
.factory('ErrorResponseInterceptor', function($rootScope, $q) {
    return {
        responseError: function(rejection) {
            var message = null;
            switch (rejection.status) {
                case 0:
                    message = "Unknown network error when loading " + rejection.config.url;
                    break;
                default:
                    message = rejection.status + " " + rejection.statusText + " when loading " + rejection.config.url; 
            }
            $rootScope.$broadcast('event:error-serverError', message);
            return $q.reject(rejection);
        }
    };
})
//for $http
.config(function($httpProvider) {
    $httpProvider.interceptors.push('ErrorResponseInterceptor')
})
//and for ngResource actions
.config(function($resourceProvider) {
    var default_actions = $resourceProvider.defaults.actions;
    angular.forEach(default_actions, function(action) {
        action['interceptor'] = {
                responseError: 'ErrorResponseInterceptor'
        }
    })
})

答案 1 :(得分:0)

您可以在$ http提供程序上设置拦截器,如文档here所示(在“拦截器”部分中)。