我在我的应用程序中使用拦截器在服务停止时进行一般错误处理 即使我已经更改了基本网址来测试我的服务,我也会获得状态200的成功响应。我做错了什么?
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;
}
};
});
答案 0 :(得分:1)
在while(input.hasNext()) {
if(input.hasNextInt()) {
x = input.nextInt();
if(x < 0) {
// return or
// throw exception or whatever your requirements is.
}
// your business logic
}
}
中添加拦截器的最佳方法是为此创建一个单独的工厂并将其推送到$httpProvider
$httpProvider.interceptors
答案 1 :(得分:1)
您可以使用拦截器编写全局异常处理程序。您只需要覆盖responseError拦截器。在这里我打电话给#34; openErrorModel&#34;在$ rootScope上定义的方法,以便在出现错误时打开错误消息并显示错误消息。 这将更清洁和模块化。并且你可以通过这种方式避免重复。
示例代码:
(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));
//注册拦截器
(function (global) {
"use strict";
angular.module("TestApp", [])
.config([ '$httpProvider',function ($httpProvider) {
/* Register the interceptor */
$httpProvider.interceptors.push('httpInterceptor');
}]);
}(this));
PS:我的openErrorModel定义
$rootScope.openErrorModel = function (error) {
$rootScope.errorMessage = error.data;
$('#errorModal').modal('show');
};
您可以参考Error Handling in angular了解更多信息。