我有一个基本的角度http
拦截器来处理我的所有错误。我需要检查返回的data
是否都是string
类型,以便将其作为错误处理,而不是成功。
'response': function(response) {
if(typeof response.data === 'string') {
response.status = 422;
return $q.reject(response);
} else {
return response;
}
},
'responseError': function(rejection) {
return $q.reject(rejection);
}
目前,如果data
是string
的类型,它将输入正确的if语句,更改状态并返回。虽然,Angular并没有将此视为错误。在我的http
函数中,它既不调用成功也不调用错误回调。如果API返回合法错误,则会进入' responseError'成功,并按预期调用错误回调。
$http({
method: 'POST',
url: "http://mydomain/api/login",
data: $.param({
username: "test",
password: "test"
}),
headers: {'Content-Type': 'application/x-www-form-urlencoded'}
}).then(successCallback(response), errorCallback(response));
如何让我的拦截器返回Angular可以识别的错误,以便从我的http
函数输入错误回调?
答案 0 :(得分:0)
作为一种解决方案,您需要为下面的常见ajaz响应和responseError建立工厂,并将其注入系统的配置中,如下所示。
// Angular factory在单独的文件中并加载到索引中。
angular.module('yourApp').factory('myHttpInterceptor', function($q, $location) {
return {
// optional method
'response': function(response) {
// do something on success
if(typeof response.data === 'string') {
response.status = 422;
return $q.reject(response);
} else {
return response;
}
},
// optional method
'responseError': function(rejection) {
// do something on error
return $q.reject(rejection);
}
};
});
现在拦截app.js中的配置
.config([ '$httpProvider',
function($httpProvider) {
$httpProvider.interceptors.push('myHttpInterceptor');
} ])
这适合我。