Подтвердить что ты не робот

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);
4b9b3361

Ответ 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 был использован в запросе?