序文インターセプター 最近のフロントエンド フレームワークでは、インターセプターは基本的に非常に基本的ですが、非常に重要な部分です。たとえば、Angular はネイティブでインターセプター構成をサポートしており、VUE の Axios モジュールもインターセプター構成を提供しています。では、インターセプターとは正確には何であり、どのような用途があるのでしょうか。 インターセプターは解決に役立ちます
vue-resource を使用して vue プロジェクトで非同期読み込みを実装するプロセスでは、任意のページの任意の http リクエスト中にトークンの有効期限のチェックを追加する必要があります。トークンの有効期限が切れている場合は、ログイン ページにジャンプする必要があります。各ページの http リクエスト操作に判定を追加する場合、非常に大きな修正作業量になります。では、vue-resource にはリクエスト応答をキャプチャするパブリック コールバック関数がありますか?答えはイエスです! vue-resource のインターセプターの役割はまさにこの要件に対する解決策です。各 http リクエスト応答の後、インターセプターが設定されている場合は、インターセプター関数が最初に実行されて応答本体が取得され、次に受信のために応答を返すかどうかが決定されます。次に、このインターセプターの応答ステータス コードに対する判断を追加して、ログイン ページにジャンプするか、現在のページに留まってデータの取得を継続するかを決定できます。 インストールとリファレンスNPM: /*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 をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: Ubuntu 16.04 サーバーで MySQL を設定し、リモート接続を有効にする方法
>>: MySQL 5.7.17 のインストールと設定方法のグラフィック チュートリアル (Windows)
序文データベースは常に私の弱点でした。自分の経験 (python+sqlalchemy) を組み合わ...
Docker テクノロジの開発により、マイクロサービスの実装にさらに便利な環境が提供されます。Doc...
<br />jb51.net では、常に記事のセマンティクスを重視してきましたが、HTM...
コードをコピーコードは次のとおりです。 <hr style="width:490px...
目次1. カスタムルーティング2. タブナビゲーション3. データの返却要約する1. カスタムルーテ...
最近のプロジェクトでフォームを作成するときに、コメント ボックスまで自動的にスクロールし、コメント ...
リアルタイム レプリケーションは、企業データをバックアップする最も重要な方法です。主に、ユーザーが送...
序文最近、仕事でいくつかの問題が発生しました。crontab でスケジュールされたタスクが実行されま...
序文: Vue では、props を使用して、もともと分離されていたコンポーネントを直列に接続するこ...
<br />関連記事: Web スキル: 複数の IE バージョンを共存させるソリューシ...
いつから始まったのかはわかりませんが、コンピュータの電源を入れてインターネットに接続するたびに、デー...
目次1. 関数シグネチャ2. 関数のオーバーロード2.1 オーバーロードされたシグネチャは呼び出し可...
目次1. Dockerをインストールする2. GitLabをインストールする3. GitLabを初期...
Alibaba Cloud Server を使用している場合は、セキュリティ グループ設定でポート ...
なぜ仮想DOMが必要なのでしょうか?仮想 DOM はブラウザのパフォーマンス問題を解決するために設計...