vue-resource インターセプターの使用に関する詳細な説明

vue-resource インターセプターの使用に関する詳細な説明

序文

インターセプター

最近のフロントエンド フレームワークでは、インターセプターは基本的に非常に基本的ですが、非常に重要な部分です。たとえば、Angular はネイティブでインターセプター構成をサポートしており、VUE の Axios モジュールもインターセプター構成を提供しています。では、インターセプターとは正確には何であり、どのような用途があるのでしょうか。

インターセプターは解決に役立ちます

  • 統一されたリクエストパラメータを追加する
  • たとえば、ヘッダーに X-Requested-With を追加するか、クライアントが署名とトークンの検証メカニズムを実装する必要があります。たとえば、$http.get('/files', params) と記述すると、インターセプターがそれを http://www.xxxx.com/1/files のようなリクエスト アドレスに接合するのに役立ちます。
  • 統合レスポンスの処理エラー
  • たとえば、再接続メカニズムはエラー コードを取得して再接続します。たとえば、トークンの有効期限が切れた場合は、トークンを再度取得して、リクエストを再度送信します。
  • たとえば、エラーメッセージを統一し、返されたすべての404に対してプロンプトを表示すると便利です。

vue-resource を使用して vue プロジェクトで非同期読み込みを実装するプロセスでは、任意のページの任意の http リクエスト中にトークンの有効期限のチェックを追加する必要があります。トークンの有効期限が切れている場合は、ログイン ページにジャンプする必要があります。各ページの http リクエスト操作に判定を追加する場合、非常に大きな修正作業量になります。では、vue-resource にはリクエスト応答をキャプチャするパブリック コールバック関数がありますか?答えはイエスです!

vue-resource のインターセプターの役割はまさにこの要件に対する解決策です。各 http リクエスト応答の後、インターセプターが設定されている場合は、インターセプター関数が最初に実行されて応答本体が取得され、次に受信のために応答を返すかどうかが決定されます。次に、このインターセプターの応答ステータス コードに対する判断を追加して、ログイン ページにジャンプするか、現在のページに留まってデータの取得を継続するかを決定できます。

インストールとリファレンス

NPM: npm install vue-resource --save-dev

/*Vueフレームワークの紹介*/
'vue' から Vue をインポートします
/*リソース要求プラグインを導入する*/
'vue-resource' から VueResource をインポートします。

/*VueResourceプラグインを使用する*/
Vue.use(Vueリソース)

main.jsに次のコードを追加します。

Vue.http.interceptors.push((リクエスト、次) => {
 console.log(this) //これはリクエストされたページのVueインスタンスです //リクエストを変更します
 request.method = 'POST'; // リクエストの前にいくつかの前処理と構成を行うことができます // 次のインターセプターに進みます
  next((response) =>{//レスポンスの後、レスポンスをthenに渡す前に、レスポンスを修正して論理的な判断を下します。トークンの有効期限が切れたかどうかの判断は、ここで追加します。ページ内のすべてのhttpリクエストは、最初にこのメソッドを呼び出します。response.body = '...';
    応答を返します。

 });
});

インターセプターの例

(1)リクエストにローディング効果を加える

インターセプターを使用すると、すべてのリクエスト処理に読み込み画面を追加できます。リクエストを送信する前に読み込み画面を表示し、応答を受信した後に読み込み画面を非表示にします。
具体的な手順は次のとおりです。

//1. 読み込みコンポーネントを追加する <template id='loading-template'>
  <div class='loading-overlay'></div>
</テンプレート>

//2. 読み込みコンポーネントを別の Vue インスタンスのサブコンポーネントとして使用する var help = new Vue({
  el: '#ヘルプ',
  データ: {
    表示読み込み: false
  },
  コンポーネント:
    '読み込み中': {
      テンプレート: '#loading-template',
    }
  }
})

//3. Vue インスタンスを HTML 要素にマウントする <div id='help'>
  <読み込み中 v-show='読み込み中'></読み込み中>
</div>

//4. インターセプターを追加する
Vue.http.interceptors.push((リクエスト、次) => {
  読み込み中.show = true;
  次へ((レスポンス) => {
    読み込み中.show = false;
    応答を返します。
  });
});

ただし、ユーザーが画面に長時間留まると、ビュー データが最新ではなくなる可能性があります。このとき、ユーザーがデータの一部を削除または変更した場合、そのデータが他のユーザーによって削除されていた場合、サーバーは 404 エラーをフィードバックします。ただし、put および delete リクエストは errorCallback を処理しないため、ユーザーは操作が成功したか失敗したかを知ることができません。この問題もインターセプターによって解決できます。

(2)リクエストに共通のエラー処理メソッドを追加する

//1. 上記の読み込みコンポーネントを引き続き使用し、#help 要素の下にダイアログボックス <div id='help'> を追加します。
  <読み込み中 v-show='読み込み中' ></読み込み中>
  <モーダルダイアログ:show='showDialog'>
    <header class='ダイアログ ヘッダー' slot='ヘッダー'>
      <h3 class='dialog-title'>サーバー エラー</h3>
    </ヘッダー>
    <div class='ダイアログボディ' slot='ボディ'>
      <p class='error'>申し訳ありません。サーバーにエラーが発生しました。エラー コード: {{errorCode}}.</p>
    </div>
  </モーダルダイアログ>
</div>

//2. ヘルプインスタンスのデータオプションに2つのプロパティを追加します。var help = new Vue({
    el: '#ヘルプ',
    データ: {
      表示読み込み: false、
      表示ダイアログ: false、
      エラーコード: ''
    },
    コンポーネント:
      '読み込み中': {
        テンプレート: '#loading-template',
      }
    }
  })

//3. インターセプターを変更する
Vue.http.interceptors.push((リクエスト、次) => {
  help.showLoading = true;
  次へ((レスポンス) => {
    if(!response.ok){
      help.errorCode = レスポンスステータス;
      help.showDialog = true;
    }
    help.showLoading = false;
    応答を返します。
  });
});

vue-resource インターセプターの詳しい使い方については、これで終わりです。vue-resource インターセプターに関するより詳しい内容については、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続きご覧ください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Vue はリクエストインターセプターと vue-resource インターセプターの使用を追加します
  • vue-resource インターセプターのヘッダー情報設定の例
  • Vue リソースインターセプターがトークン無効ジャンプを判断する例
  • vue-resourceインターセプターの使用に関する詳細な説明
  • vue-resourceインターセプターの使用に関する詳細な説明

<<:  Ubuntu 16.04 サーバーで MySQL を設定し、リモート接続を有効にする方法

>>:  MySQL 5.7.17 のインストールと設定方法のグラフィック チュートリアル (Windows)

推薦する

MySQL 全文インデックスガイド

全文インデックスには特別なクエリ構文が必要です。全文検索はインデックスの有無にかかわらず実行できます...

Vue バックグラウンドでステータス ラベルをエレガントに記述する例

目次序文最適化変数の抽出二次包装 el-tag コンポーネント使用要約する序文バックエンドシステムの...

Linux でのスケジュールされたタスクと遅延タスクの詳細な説明

で+ 時間 17:23に at> touch /mnt/file{1..9} ##アクションを...

RGBカラーテーブルコレクション

RGBカラーテーブル色英語名RGB 16色雪255 250 250 #FFFAFAゴーストホワイト2...

Mysql 5.7.19 無料インストール バージョンで遭遇した落とし穴 (コレクション)

1. 公式ウェブサイトから 64 ビットの zip ファイルをダウンロードします。 2. インスト...

Truncate Table の使用法の説明

テーブルを切り捨てる個々の行の削除をログに記録せずに、テーブル内のすべての行を削除します。文法 テー...

mysql5.7.20 での最初のログイン失敗に対する簡単な解決策

まず、 (1)MySQL 5.7にはデフォルトのパスワードがあるデフォルトのパスワードを見つける g...

ES6 Promiseの使い方の詳細な説明

目次約束とは何ですか?拒否の使用法キャッチの使い方すべての使用法レースの使用約束とは何ですか? Pr...

MySQLを使用して列内の異なる値の数をカウントする例

序文この記事で実装されている要件は、実際には非常に一般的です。たとえば、ユーザーが登録したチャネルを...

Vueの監視プロパティの詳細な説明

目次Vue モニターのプロパティリスナープロパティとは何ですか?リスニングプロパティと計算プロパティ...

@Font-face の基本的な使い方と、すべてのブラウザと互換性を持たせる方法

@Font-face 基本紹介: @font-face は、Web ページにカスタム フォントを表示...

MySQL 5.7.20 解凍版のインストールとルートパスワードの変更に関するチュートリアル

1. MySQL アーカイブ (解凍版) をダウンロードするURL: https://downloa...

KVM 仮想マシンのオンライン ホット マイグレーションを実装する方法 (画像とテキスト)

1. KVM仮想マシンの移行方法と注意すべき点KVM 仮想マシンを移行する方法は 2 つあります。...

トランジションコンポーネントのアニメーション効果を使用した Vue サンプルコード

トランジションドキュメントアドレスは、フェードインとフェードアウト効果を実現するための背景ポップアッ...

文字列から指定された文字を削除または抽出する JavaScript メソッド (非常によく使用されます)

目次1. 部分文字列() 2. サブストラクチャ() 3.インデックス() 4.最後のインデックス(...