1

私は404レスポンスを扱うためにAngularでインターセプタをコード化しています。リクエストがRESTサービスから来た場合、インターセプタは要求をインターセプトしてはなりません。私の主な問題は、リクエストがページ要求かRESTサービスリクエストかを区別することです。現在、私はrejection.config.urlのURLを使用しており、自分のREST URLサービスがその値と一致するかどうかをテストしています。このアプローチは有効ですが、これは良い解決策ではないと思います。それを行うための別の方法や良い方法がありますか?Angularインターセプタの通常リクエストから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'値を使ってリクエストがRESTサービスから来たときを処理しています。私はURLにパターンを求めています。しかし、私はこれが最善の解決策ではないと思います。 –

+0

より直接的なアプローチは、サーバ上のREST APIへの$ http要求を行うAngularJSサービスに '.catch'ハンドラを置くことです。 – georgeawg

答えて

3

ここでは、代替です:そのが良いかどうと言うことはできません: - |

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

:今

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

あなたのインターセプタであなたは次のように確認することができます:あなたはREST APIを呼び出すとき...あなたは次のようにフラグを設定オブジェクトを渡し、:)

を決めますもちろん、各REST API呼び出しにこのconfigオブジェクトを渡す必要があります。あなたはconfigオブジェクトを追加します(またはconfigオブジェクトが外部から渡された場合だけignore404プロパティを追加)$http上で、独自のラッパーを書いて、あなたのREST APIを呼び出し中$httpの代わりにこのサービスを使用する場合があり、そのために

関連する問題