AngularJs: Исключить некоторые запросы от Interceptor
Ниже мой перехватчик, который обрабатывает глобальные ошибки. Но я хочу обойти некоторые HTTP-запросы. Любые предложения?
var interceptor = ['$rootScope', '$q',function (scope, $q) {
function success(response) {
return response;
}
function error(response) {
var status = response.status;
if (status == 401) {
window.location = "./index.html#/404";
return;
}
if (status == 0) {
window.location = "./index.html#/nointernet";
}
return $q.reject(response);
}
return function (promise) {
return promise.then(success, error);
}
}];
$httpProvider.responseInterceptors.push(interceptor);
Ответы
Ответ 1
Я смог реализовать эту функциональность, просто добавив свойство в объект конфигурации запроса $http. то есть. ignore401
. Затем, в моем перехватчике, в обработчике ошибок ответа, проверьте свойство на объекте конфигурации, и если он присутствует, не переадресовывайте логин или что-то еще, что вы делаете в ответ 401.
Во-первых, перехватчик:
$provide.factory('authorization', function() {
return {
...
responseError: (rejection) => {
if (rejection.status === 401 && !rejection.config.ignore401) {
// redirect to login
}
return $q.reject(rejection);
}
};
});
Затем для любого запроса, который я хочу обойти обработчик ошибок 401:
$http({
method: 'GET',
url: '/example/request/to/ignore/401error',
ignore401: true
});
Надеюсь, что это поможет.
Ответ 2
Я решаю это следующим образом:
$httpProvider.interceptors.push(function($rootScope) {
return {
request: function(config) {
var hideUrl = "benefit/getall"; // don't show the loading indicator for this request
var hide = (config.url.indexOf(hideUrl)); // is this isn't -1, it means we should hide the request from the loading indicator
if(hide == -1)
{
$rootScope.$broadcast('loading:show')
}
return config
},
response: function(response) {
$rootScope.$broadcast('loading:hide')
return response
}
}
});
Ответ 3
Не содержит ли объект ответа свойство "options", где вы можете проверить, какой URL был использован в запросе?