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'); }; |
有关详细信息,请参阅角度错误处理。
在
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'); }); |