http-перехватчик AngularJS с выборочным URL-адресом

Как заставить перехватчик $http реагировать только на заданные шаблоны?

Например, я хотел бы, чтобы перехватчик обрабатывал каждый запрос «/api/*» и оставлял другие запросы в покое.


person brazorf    schedule 13.10.2015    source источник
comment
вы не можете выборочно применить перехватчик, поэтому перехватчику придется оценивать объект config (https://docs.angularjs.org/api/ng/service/$http#usage) request и решить, следует ли предпринимать какие-либо действия.   -  person Claies    schedule 13.10.2015


Ответы (1)


Вы можете отфильтровать URL-адрес в функциях успеха или отклонения как в запросе, так и в ответе.

Допустим, вам нужно обработать ошибки для запросов и ответов для URL-адресов, начинающихся с «math/».

Вот ваш перехватчик.

$httpProvider.interceptors.push(function($q, mathError) {
                        return {

                            requestError: function(rejection){                            
                                mathError.anyError(rejection);    
                                return $q.reject(rejection);
                            },

                            responseError: function(rejection){                            
                                mathError.anyError(rejection);
                                return $q.reject(rejection);
                            }
                        };
    });

Вот ваша фабрика, где вы ее обрабатываете

myApp.factory('mathError', function(){
    return {
                anyError: function(rejection){ 

                     if (rejection.config.url.substr(0, 5) === "math/") {

                         console.log("Only Math errors are handled here"); 

                         //Do whatever you need here
                     }
                }            

});
person Charlie    schedule 13.10.2015