2014-01-10 24 views
11

以下はグローバルエラーを処理するインターセプタです。しかし、私はいくつかのHTTP要求をバイパスしたい助言がありますか ?AngularJs:インターセプタからのリクエストを除外する

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リクエストのconfigオブジェクトにプロパティを追加することで、この機能を実装することができました。すなわち、 ignore401。次に、私のインターセプター、レスポンス・エラー・ハンドラーで、configオブジェクトのプロパティーを検査し、存在する場合は、ログインに転送しないでください。

まず、インターセプタ:

$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

として受け入れる必要がありますが、依頼に応じてconfigオブジェクトに「カスタム」プロパティを追加することは依然として応答で利用できることは確実です。 – cipak

0

レスポンスオブジェクトには、要求で使用された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 
     } 
    } 
    }); 
関連する問題