私は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);
}
};}]);
リクエストのURLは 'response.config.url'として利用できます。 – georgeawg
はい、@georgeawg。あなたは正しい。私は 'response.config.url'値を使ってリクエストがRESTサービスから来たときを処理しています。私はURLにパターンを求めています。しかし、私はこれが最善の解決策ではないと思います。 –
より直接的なアプローチは、サーバ上のREST APIへの$ http要求を行うAngularJSサービスに '.catch'ハンドラを置くことです。 – georgeawg