2014-01-10 5 views
11

Ниже мой перехватчик, который обрабатывает глобальные ошибки. Но я хочу обойти некоторые HTTP-запросы. Какие-либо предложения ?AngularJs: Исключить некоторые запросы от Interceptor

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

ответ

27

я смог реализовать эту функцию, просто добавив свойство к конфигурации объекта запроса $ HTTP. то есть. ignore401. Затем в моем перехватчике, в обработчике ошибок ответа, проверьте свойство на объекте config, и если он присутствует, не переадресуйте логин или что-то еще, что вы делаете в ответ 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 
}); 

Надежда, что помогает.

+1

должен приниматься как ответ –

+0

, но нет уверенности, что добавление «настраиваемого» свойства в объект конфигурации по запросу будет по-прежнему доступным в ответе, есть ли? – cipak

0

Не содержит ли объект ответа свойство "options", где вы можете проверить, какой URL-адрес использовался в запросе?

1

Я решить это следующим образом:

$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 
     } 
    } 
    }); 
Смежные вопросы