ホームページ ウェブフロントエンド jsチュートリアル AngularJs HTTP レスポンス interceptor_AngularJS の簡単な分析

AngularJs HTTP レスポンス interceptor_AngularJS の簡単な分析

May 16, 2016 pm 03:23 PM
angularjs インターセプター

なぜインターセプターを使用するのでしょうか?

いつでも、認証やエラー処理などのグローバル機能をリクエストに追加したい場合は、リクエストがサーバーに送信される前、またはサーバーが戻ったときにリクエストをインターセプトする方が良い方法です。

angularJs は、インターセプターを介してグローバル レベルから処理する方法を提供します。

インターセプターにより次のことが可能になります:

リクエスト メソッドを実装してリクエストをインターセプトする: このメソッドは、$http がリクエストをバックグラウンドに送信する前に実行されるため、構成を変更したり、他の操作を実行したりできます。このメソッドはリクエスト構成オブジェクトをパラメーターとして受け取り、構成オブジェクトまたは Promise を返す必要があります。無効な構成オブジェクトまたは Promise が返された場合、それは拒否され、$http 呼び出しが失敗します。


応答メソッドを実装して応答をインターセプトする: このメソッドは、$http がバックグラウンドから応答を受信した後に実行されるため、応答を変更したり、他の操作を実行したりできます。このメソッドは応答オブジェクトをパラメータとして受け取り、応答オブジェクトまたは Promise を返す必要があります。応答オブジェクトには、要求構成、ヘッダー、ステータス、およびバックグラウンドからのデータが含まれます。無効な応答オブジェクトが返された場合、または Promise が拒否された場合、$http 呼び出しは失敗します。

requestError メソッドを実装してリクエストの例外をインターセプトする: リクエストの送信に失敗したり、インターセプターによって拒否されたりすることがあります。リクエスト例外インターセプターは、前のリクエスト インターセプターによって中断されたリクエストをキャプチャします。これは、リクエストを復元したり、場合によっては、プログレス バーを閉じたり、ボタンや入力ボックスをアクティブにしたりするなど、リクエストの前に行われた設定を元に戻すために使用できます。


responseError メソッドを実装して、応答例外をインターセプトします。バックグラウンド呼び出しが失敗する場合があります。リクエスト インターセプターによって拒否されたか、前の応答インターセプターによって中断された可能性もあります。この場合、応答例外インターセプターはバックグラウンド呼び出しを再開するのに役立ちます。

インターセプターのコアはサービス ファクトリであり、$httpprovider.interceptors 配列に追加されます。 $httpProvider に登録します。


AngularJs は、2 つの成功インターセプター (request、response) と 2 つの失敗インターセプター (requestError、responseError) を含む 4 つのインターセプターを提供します。

サービスに 1 つ以上のインターセプターを追加します:

angular.module("myApp", []) 
  .factory('httpInterceptor', [ '$q', '$injector',function($q, $injector) { 
    var httpInterceptor = { 
      'responseError' : function(response) { 
        ...... 
        return $q.reject(response); 
      }, 
      'response' : function(response) { 
        ...... 
        return response; 
      }, 
      'request' : function(config) { 
        ...... 
        return config; 
      }, 
      'requestError' : function(config){ 
        ...... 
        return $q.reject(config); 
      } 
    } 
  return httpInterceptor; 
} 
ログイン後にコピー
次に、$httpProvider を使用して .config() 関数にインターセプターを登録します

angular.module("myApp", []) 
.config([ '$httpProvider', function($httpProvider) { 
  $httpProvider.interceptors.push('httpInterceptor'); 
} ]); 
ログイン後にコピー
実際の例: (401、404 の傍受)

routerApp.config([ '$httpProvider', function($httpProvider) { 
    $httpProvider.interceptors.push('httpInterceptor'); 
  } ]); 
  routerApp.factory('httpInterceptor', [ '$q', '$injector',function($q, $injector) { 
    var httpInterceptor = { 
      'responseError' : function(response) { 
        if (response.status == 401) { 
          var rootScope = $injector.get('$rootScope'); 
          var state = $injector.get('$rootScope').$state.current.name; 
          rootScope.stateBeforLogin = state; 
          rootScope.$state.go("login"); 
          return $q.reject(response); 
        } else if (response.status === 404) { 
          alert("404!"); 
          return $q.reject(response); 
        } 
      }, 
      'response' : function(response) { 
        return response; 
      } 
    } 
    return httpInterceptor; 
  }  
]); 
ログイン後にコピー

セッションインジェクション (リクエストインターセプター)

サーバー側認証を実装するには 2 つの方法があります。 1 つ目は、従来の Cookie ベースの認証です。ユーザーは、サーバー側の Cookie によってリクエストごとに認証されます。もう 1 つの方法は、トークンベースの検証です。ユーザーがログインすると、バックグラウンドから sessionToken を取得します。 sessionToken はサーバー側で各ユーザーを識別し、サーバーに送信されるすべてのリクエストに含まれます。

次の sessionInjector は、キャプチャされた各リクエストに x-session-token ヘッダーを追加します (現在のユーザーがログインしている場合):

<!-- lang: js -->
module.factory('sessionInjector', ['SessionService', function(SessionService) {
  var sessionInjector = {
    request: function(config) {
      if (!SessionService.isAnonymus) {
        config.headers['x-session-token'] = SessionService.token;
      }
      return config;
    }
  };
  return sessionInjector;
}]);
module.config(['$httpProvider', function($httpProvider) {
  $httpProvider.interceptors.push('sessionInjector');
}]);
ログイン後にコピー
次にリクエストを作成します:

<!-- lang: js -->
$http.get('https://api.github.com/users/naorye/repos');
ログイン後にコピー
sessionInjector によってインターセプトされる前の構成オブジェクトは次のようになります:

<!-- lang: js -->
{
  "transformRequest": [
    null
  ],
  "transformResponse": [
    null
  ],
  "method": "GET",
  "url": "https://api.github.com/users/naorye/repos",
  "headers": {
    "Accept": "application/json, text/plain, */*"
  }
}
ログイン後にコピー
sessionInjector によってインターセプトされた後の構成オブジェクトは次のようになります:

<!-- lang: js -->
{
  "transformRequest": [
    null
  ],
  "transformResponse": [
    null
  ],
  "method": "GET",
  "url": "https://api.github.com/users/naorye/repos",
  "headers": {
    "Accept": "application/json, text/plain, */*",
    "x-session-token": 415954427904
  }
}
ログイン後にコピー
上記のコンテンツでは、AngularJs HTTP レスポンス インターセプターの関連知識を紹介しています。この記事を共有することが役立つことを願っています。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Golang のインターセプター メカニズムを解明する Golang のインターセプター メカニズムを解明する Apr 08, 2024 am 08:39 AM

インターセプターは、メソッド実行の前後にカスタム動作を挿入できるようにする設計パターンで、Go では net/http ミドルウェアを通じて実装できます。スケーラビリティ、再利用性、テスト容易性などの利点があり、認証、認可、キャッシュ、ロギング、カスタム エラー処理などのシナリオで使用できます。

入門から習得まで、2022 年の最新 5 つの angularjs チュートリアル 入門から習得まで、2022 年の最新 5 つの angularjs チュートリアル Jun 15, 2017 pm 05:50 PM

Javascript は、コードの構成、コードのプログラミング パラダイム、およびオブジェクト指向理論の点で非常にユニークな言語です。しかし、JavaScript が 20 年間主流であったとはいえ、jQuery、Angularjs、さらには React などの人気のあるフレームワークを理解したい場合は、「Black Horse Cloud Classroom JavaScript Advanced Framework」を見てください。デザインビデオチュートリアル」。

uniapp でルート インターセプターを使用するためのヒント uniapp でルート インターセプターを使用するためのヒント Dec 17, 2023 pm 04:30 PM

uniapp でルート インターセプターを使用するためのヒント uniapp 開発では、ルート インターセプターは非常に一般的な機能です。ルート インターセプターを使用すると、ルーティング ジャンプの前に、アクセス許可の確認、ページのパラメーターの受け渡しなど、いくつかの特定の操作を実行できます。この記事では、uniapp でルート インターセプターを使用するためのヒントを紹介し、具体的なコード例を示します。ルート インターセプターの作成 まず、uniapp プロジェクトでルート インターセプターを作成する必要があります。作成方法は以下の通りです。 プロジェクトのルートディレクトリにinterを作成します。

Spring インターセプターの原理と利点を理解する Spring インターセプターの原理と利点を理解する Dec 30, 2023 pm 12:25 PM

Spring インターセプターの動作原理と利点を探る はじめに: Spring フレームワークは、Java 開発で最も一般的に使用されるフレームワークの 1 つであり、豊富な機能と柔軟性を提供し、開発者がアプリケーションをより効率的に開発できるようにします。重要なコンポーネントの 1 つはインターセプターです。この記事では、Spring インターセプターの動作原理と利点を詳しく説明し、具体的なコード例を示します。 1. Spring インターセプターの仕組み Spring インターセプターはアスペクト指向プログラミングを使用します (

PHP と AngularJS を使用して応答性の高い Web サイトを構築し、高品質のユーザー エクスペリエンスを提供します PHP と AngularJS を使用して応答性の高い Web サイトを構築し、高品質のユーザー エクスペリエンスを提供します Jun 27, 2023 pm 07:37 PM

今日の情報化時代において、ウェブサイトは人々が情報を入手し、コミュニケーションを図るための重要なツールとなっています。レスポンシブな Web サイトはさまざまなデバイスに適応し、ユーザーに高品質のエクスペリエンスを提供できます。これは、現代の Web サイト開発のホットスポットとなっています。この記事では、PHP と AngularJS を使用して応答性の高い Web サイトを構築し、高品質のユーザー エクスペリエンスを提供する方法を紹介します。 PHP の概要 PHP は、Web 開発に最適なオープンソースのサーバー側プログラミング言語です。 PHP には、学びやすさ、クロスプラットフォーム、豊富なツール ライブラリ、開発効率など、多くの利点があります。

Golang におけるインターセプターの包括的な分析 Golang におけるインターセプターの包括的な分析 Apr 07, 2024 am 10:18 AM

Golang では、インターセプターを使用して、関数の実行の前後に追加のコードを挿入できます。シナリオには、ロギング、認証、キャッシュなどが含まれます。インターセプターは、ハンドラー関数タイプを作成してから、そのハンドラー関数を受け入れ、追加のロジックを含む新しいハンドラー関数を返すインターセプター関数を作成することによって実装されます。実際の戦闘では、インターセプターを使用してすべてのリクエストを記録し、デバッグと分析を容易にすることができます。

Golang でインターセプターをマスターする Golang でインターセプターをマスターする Apr 07, 2024 pm 09:33 PM

インターセプターを使用すると、既存のコードを変更せずにカスタム ロジックを Go アプリケーションに挿入できます。これらは、認証、ロギング、エラー処理、パフォーマンス監視などに使用できます。インターセプターを作成するには、HTTP 要求を処理するための ServeHTTP() メソッドと制御を渡すための Next() メソッドを定義する Handler インターフェイスを実装する必要があります。実際の例では、ロギング インターセプターを使用してすべての受信リクエストの URL パスを記録する方法と、複数のインターセプター (認証インターセプターなど) をチェーンして複雑なアプリケーション ロジックを作成する方法を示します。

PHP と AngularJS を使用して Web アプリケーションを構築する PHP と AngularJS を使用して Web アプリケーションを構築する May 27, 2023 pm 08:10 PM

インターネットの継続的な発展に伴い、Web アプリケーションは企業情報構築の重要な部分となり、最新化作業に必要な手段となりました。 Web アプリケーションの開発、保守、拡張を容易にするために、開発者は開発ニーズに合った技術フレームワークとプログラミング言語を選択する必要があります。 PHP と AngularJS は非常に人気のある 2 つの Web 開発テクノロジであり、それぞれサーバー側とクライアント側のソリューションであり、これらを組み合わせて使用​​すると、Web アプリケーションの開発効率とユーザー エクスペリエンスを大幅に向上させることができます。 PHPPHPの利点

See all articles