1

나는 404 응답을 처리하기 위해 앵글로 인터셉터를 성문화하고 있습니다. 요청이 REST 서비스에서 오는 경우 인터셉터는 요청을 인터셉트해서는 안됩니다. 내 주요 문제는 요청이 페이지 요청 또는 REST 서비스 요청에서 오는 경우를 구분하는 것입니다. 현재 rejection.config.url에 URL을 사용하고 있으며 내 REST URL 서비스가 해당 값과 일치하는지 테스트합니다. 이 접근 방식이 효과적 일지라도, 나는 이것이 좋은 해결책이 아니라고 생각합니다. 다른 방법이나 더 좋은 방법이 있을까요?각도 서비스 요원의 정상적인 요청에서 휴식 서비스와 404를 구별합니다.

인터셉터 코드 : 경우 말할 수 없다 그것의 더 나은 여부 : : 여기

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' 값을 사용하여 요청이 REST 서비스에서 오는 시점을 처리합니다. 나는 URL에서 패턴을 찾고있다. 하지만 이것이 최선의 해결책은 아니라고 생각합니다. –

+0

보다 직선적 인 접근 방법은 서버의 REST API에 $ http 요청을하는 AngularJS 서비스에'.catch' 핸들러를 두는 것입니다. – 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 호출에 대해이 config 객체를 전달해야합니다. 당신이 구성 객체를 추가 (또는 config 객체가 외부에서 전달되는 경우 바로 ignore404 속성을 추가) $http을 통해 자신의 래퍼를 작성하여 REST API를 호출하는 동안 $http의 장소에서이 서비스를 사용할 수에 대한

.