1

Я кодирую перехватчик в Angular для обработки 404 ответов. Когда запрос поступает из службы REST, перехватчик не должен перехватывать запрос. Моя основная проблема заключается в том, чтобы различать, когда запрос поступает из запроса страницы или из запроса службы REST. В настоящее время я использую URL-адрес в rejection.config.url и тестирую, соответствует ли моя служба URL REST этому значению. Хотя этот подход работает, я думаю, что это не очень хорошее решение. Есть ли другой способ или лучший способ сделать это?Дифференцировать 404 из службы Rest из обычного запроса в угловых перехватчиках

перехватчик Код:

angular.module("mainApp").factory("notFoundInterceptor",['$q','$location','$rootScope', function ($q,$location,$rootScope) { 
return { 
    responseError: function (rejection) { 
     function isURLFromRESTService(rejection) { 
      var url = /myresturl/; //pattern used to match REST URL 
      return url.test(rejection.config.url); 
     } 

     if (rejection.status === 404 and !isURLFromRESTService(rejection)) { // Not found 
       $rootScope.notFound = { 
        erro: 'Não possível encontrar: ' + $location.url() 
       } 
       $location.path('/notfound'); 
     } 

     return $q.reject(rejection); 
    } 
};}]); 
+0

URL-адрес запроса доступен как 'response.config.url'. – georgeawg

+0

Да, @georgeawg. Вы правы. Я использую 'response.config.url'value для обработки, когда запрос поступает из служб REST. Я просматриваю шаблон по URL-адресу. Но я думаю, что это не лучшее решение. –

+0

Более прямой подход заключается в том, чтобы поместить обработчик '.catch' в службу AngularJS, которая делает запрос $ http для API REST на сервере. – georgeawg

ответ

3

Вот альтернатива: не могу сказать, если ее лучше или нет: - | ... вы решили :)

При вызове ваш REST API, передать объект конфигурации с флагом, как:

$http.get('REST API URL', { ignore404: true }) 

Теперь в вашем перехватчик вы можете проверить, как:

if (rejection.status === 404 && !rejection.config.ignore404) { 
    $rootScope.notFound = { 
     erro: 'Não possível encontrar: ' + $location.url() 
    } 
    $location.path('/notfound'); 
} 

Конечно, вам нужно будет передать этот конфигурационный объект для каждого из вызовов REST API.

Для этого вы можете написать свою собственную обертку над $http, который добавляет объект конфигурации (или просто добавить ignore404 свойства, если config объекта передаются извне) и использовать эту услугу вместо $http при вызове вашего REST API.

Смежные вопросы