关于angularjs:Angular中的通用错误处理

Generic error handling in Angular

我在我的应用程序中使用拦截器在服务停止时进行通用错误处理
即使我已经更改了基本网址来测试我的服务,我也会获得状态200的成功响应。 我究竟做错了什么??

1
2
3
4
5
6
7
8
9
10
11
12
13
14
      var myServices = angular.module('myServices', ['ngResource']);

       myServices.config(function ($provide, $httpProvider) {
       $provide.factory('ErrorInterceptor', function ($q) {
       return {
        response: function(){
        return response;// always success??
       }
        responseError: function(rejection) {
        $scope.addErrorAlert("Services are currently not responding.  Please try again later.",true);
            return;
        }
    };
});


您可以使用拦截器来编写全局异常处理程序。 您只需要覆盖responseError拦截器。 这里我称为$ rootScope上定义的"openErrorModel"方法,以便在出现错误时打开错误消息并显示错误消息。
这将更清洁和模块化。 你可以通过这种方式避免重复。

示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
(function (global) {
   "use strict";

    angular.module("TestAPp").factory('httpInterceptor', ["$rootScope","$q", function ($rootScope, $q) {
        return {
        responseError: function (response) {
            /* Open Error model and display error */
            $rootScope.openErrorModel(response);
            /* reject deffered object so that it'll reach error block , else it'll execute success function */
            return $q.reject(response);
        }
        };
    }]);

}(this));

//注册拦截器

1
2
3
4
5
6
7
8
9
10
11
(function (global) {
   "use strict";

    angular.module("TestApp", [])
           .config([ '$httpProvider',function ($httpProvider) {
                /* Register the interceptor */
                $httpProvider.interceptors.push('httpInterceptor');

    }]);

}(this));

PS:我的openErrorModel定义

1
2
3
4
$rootScope.openErrorModel = function (error) {
      $rootScope.errorMessage = error.data;
      $('#errorModal').modal('show');
};

有关详细信息,请参阅角度错误处理。


$httpProvider中添加拦截器的最佳方法是为其创建一个单独的工厂并将其推送到$httpProvider.interceptors

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
var myServices = angular.module('myServices', ['ngResource']);

myServices.factory('ErrorInterceptor', function ($q) {
    return {
        responseError: function (response) {
            return $q.reject(response);
        }
    };

})
myServices.config(function ($httpProvider) {

    $httpProvider.interceptors.push('ErrorInterceptor');

});