Vueリクエストインターセプターの設定方法の詳しい説明

Vueリクエストインターセプターの設定方法の詳しい説明

以下の手順に従ってください

1. request.jsコンテンツ: http リクエスト インターセプターと http レスポンス サーバー レスポンス インターセプターの構成

2. http.jsコンテンツ: リクエストデータのカプセル化

3. utils.jsコンテンツ: トークンを取得し、トークンが存在するかどうかを判定する

4. ファイルstore :

vuex ウェアハウス構成

  • vuex 永続性
  • Vuex テンプレートリファレンス

5. インターフェースのカプセル化

目次

request.js コンテンツ

http requestリクエスト インターセプターとhttp responseレスポンス インターセプターの構成

// http リクエスト インターセプター、トークン値がある場合はトークン値を設定します import axios from 'axios'
'promise' から Promise をインポートします
'./utils' から util をインポートします。
'./../store/index' からストアをインポートします。
constサービス = axios.create({
    タイムアウト: 60000, // リクエストタイムアウトヘッダー: {
        // 承認: 承認、
        'コンテンツタイプ': 'application/json;charset=UTF-8'
    }
});
// http リクエスト インターセプター service.interceptors.request.use(
    設定 => {
        tokenExist = util.tokenExist(); とします。
        if (トークンが存在する) {
            // bus.$emit('toggleloading', true) //読み込み中を表示
            //トークンが存在する場合 config.headers['Authorization'] = `Bearer ${util.getToken()}`;
        }
        // Toast.loading({
        // メッセージ: '読み込み中...',
        // 期間: 0,
        // クリック禁止: true
        // });
        設定を返します。
    },
    エラー => {
        Promise.reject(エラー);
    }
)
// http 応答サーバー応答インターセプター、
//ここで401エラーをインターセプトし、ログインページに戻ってトークンを再度取得します
サービスインターセプターレスポンスの使用(
    レスポンス => {
        応答ステータス === 200 の場合
            //通信成功// Toast.clear();
            /****************
             * response.data.status === 0 エラー* response.data.status === 100 成功* response.data.status === 401 トークンの有効期限が切れました*
             * *************/
            // bus.$emit('toggleloading', false) // 読み込みを非表示にする
            (レスポンスデータの状態 === 401)の場合{
                //トークンの有効期限が切れている場合は、ログインにジャンプします Message.error("ログインの有効期限が切れています。もう一度ログインしてください!");
                store.commit('SET_TOKEN', '');
                util.goLogin();
            } そうでない場合 (response.data.state === 0) {
                // メッセージ.error(response.data.message);
                応答データを返します。
            } それ以外 {
                応答データを返します。
            }
        }
    },
    エラー => {
        //リクエストが失敗しました//;
        定数レスポンス = error.response;
        (応答ステータス === 401)の場合{
            // Toast.fail(response.data.message);
            Message.error("ログインの有効期限が切れています。もう一度ログインしてください!");
            util.goLogin();
        } そうでない場合 (response.status === 403) {
            $ルーター.push({
                名前: '403'
            });
        } それ以外 {
            // Toast.fail(response.data.message ? response.data.message : 'システムエラーです。管理者に連絡してください');
            // メッセージ.error({
            // メッセージ: 'サービスがありません。管理者に連絡してください'
            // });
        }
        Promise.reject(error) を返します。
    }
);
デフォルト サービスをエクスポートします。

http.js コンテンツ

データ要求方法

'./request' からリクエストをインポートします。
// './../store/index' からストアをインポートします。
定数http = {
    リクエスト(設定) {
        リクエスト(config);
    },
    投稿(URL, データ) {
        // if (データインスタンスオブオブジェクト) {
        // }それ以外{
        // データ = {
        // ...データ
        // };
        // }
        リクエストを返す({
            URL、
            メソッド: 'post'、
            データ
        });
    },
    postFile(url, データ, コンテンツタイプ) {
        リクエストを返す({
            URL、
            メソッド: 'post'、
            データ、
            コンテンツタイプ
        });
    },
    get(url, パラメータ) {
        リクエストを返す({
            URL、
            メソッド: 'get'、
            パラメータ
        });
    },
    (URL、データ)を置く{
        リクエストを返す({
            URL、
            メソッド: 'put'、
            データ
        });
    },
    削除(url) {
        リクエストを返す({
            URL、
            メソッド: '削除'
        });
    },
    ダウンロード(url, パラメータ) {
        リクエストを返す({
            URL、
            メソッド: 'get'、
            パラメータ、
            レスポンスタイプ: 'blob'
        });
    },
    ダウンロードポスト(url, データ) {
        リクエストを返す({
            URL、
            メソッド: 'post'、
            データ、
            レスポンスタイプ: 'blob'
        });
    }
};
デフォルトのhttpをエクスポートします。

utils.js コンテンツ

トークンを取得し、トークンが存在するかどうかを判断する

'../store/index' からストアをインポートします。
util = { とする
    //トークンを取得
    トークンを取得する() {
        store.getters.token を返します。
    },
    //トークンが存在するか判断する tokenExist() {
        フラグを立てます。
        トークンを store.getters.token とします。
        if (トークン && トークン !== '') {
            フラグ = true;
        } それ以外 {
            フラグ = false;
        }
        トークンを返します。
    },
}
デフォルトのユーティリティをエクスポートする

vuex ウェアハウス構成

  • vuex 永続性
  • Vuex テンプレートリファレンス

index.js コンテンツ

「vue」からVueをインポートします
「vuex」からVuexをインポートします
'vuex-persist' から VuexPersistence をインポートします。
'./db' から db をインポートします
Vue.use(Vuex)
//vuex 状態の永続性 const vuexLocal = new VuexPersistence({
    ストレージ:window.localStorage
})
定数ストア = 新しい Vuex.Store({
    州:{}、
    変異:{},
    アクション:{},
    モジュール:{
        デシベル
    },
    プラグイン:[vuexLocal.plugin]
})
デフォルトストアをエクスポート

db.js コンテンツ

定数db = {
    州: {
        トークン: ''、
    },
    ゲッター:{
        トークン:状態 => 状態.トークン
    },
    突然変異:
        //トークンを保存
        setToken: (状態、値) => {
            state.token = 値
        }
    },
    アクション: {}
}
デフォルトDBをエクスポート

インターフェースのカプセル化

 「../common/http」からhttpをインポートします。
/************ログインと登録*************/
//テストインターフェース関数text(params){
    http.get("api/Test/GetList", パラメータ) を返します
}
//ログイン関数Login(params) {
    http.post("api/Login/Login", パラメータ) を返します
}
// グラフィック検証コードを取得する function GetValidateCode(params) {
    http.post("api/Login/GetValidateCode", パラメータ) を返します
}
// 電話認証コードを取得します。注: 事前にヒューマンマシン認証を検証する必要があります。そうしないと、SMS によって悪意を持ってスワイプされるリスクがあります。function GetPhoneCode(params) {
    http.post("api/Login/GetPhoneCode", パラメータ) を返します。
}
//登録検証情報関数 RegisterUserVerify(params) {
    http.post("api/Login/RegisterUserVerify", パラメータ) を返します
}
// 登録、パスワードの設定、ユーザー情報の登録 function RegisterUserInfo(params) {
    http.post("api/Login/RegisterUserInfo", パラメータ) を返します。
}
// パスワード確認名と電話番号を忘れた場合 function ResetPasswordVerify(params) {
    http.post("api/Login/ResetPasswordVerify", パラメータ) を返します
}
// パスワードを忘れた場合 パスワード更新関数 ResetPassWord(params) {
    http.post("api/Login/ResetPassWord", パラメータ) を返します。
}
輸出 {
    ログイン、
    文章、
    電話コードを取得、
    登録ユーザー確認、
    検証コードを取得、
    パスワードをリセット、確認、
    パスワードをリセット、
    ユーザー情報の登録
}

要約する

この記事はこれで終わりです。皆さんのお役に立てれば幸いです。また、123WORDPRESS.COM のその他のコンテンツにも注目していただければ幸いです。

以下もご興味があるかもしれません:
  • Vue はリクエストインターセプターと vue-resource インターセプターの使用を追加します
  • Vue axios ログインリクエストインターセプター
  • Vue ルーティングインターセプターとリクエストインターセプターの知識ポイントのまとめ
  • Vue が Axios リクエストとインターセプターをカプセル化する手順
  • Vue axios インターセプターは、繰り返しリクエストのキャンセルによく使用されます。

<<:  ウェブサイトのデザイン体験のための7つの異なるカラースキーム

>>:  MySQL複合インデックスの概要

推薦する

Ubuntu 20.04にROS Noeticをインストールする方法

免責事項:プロジェクトでは ROS 環境を使用する必要があるため、これは Ubuntu 20.04 ...

Centos7 インストール mysql5.6.29 シェル スクリプト

この記事では、参考までにmysql5.6.29のシェルスクリプトを共有します。具体的な内容は次のとお...

組み込み移植 docker エラー問題 (概要)

長い移植と情報検索の期間を経て、組み込みDockerの問題を解決することができました。インターネット...

MySQL インフラストラクチャ チュートリアル: クエリ ステートメント実行プロセスの詳細な説明

序文私は以前から、SQL 文がどのように実行され、どのような順序で実行されるのかを知りたいと思ってい...

MycliはMySQLコマンドライン愛好家にとって必須のツールです

マイクリMyCLI は、自動補完と構文の強調表示を備えた MySQL、MariaDB、および Per...

Linux のソフトリンクとハードリンクの詳細な説明

目次1. ファイルとディレクトリの基本的な保存2. Inコマンドの紹介(1)lnコマンドの基本情報を...

MySQLトランザクションの基本的な学習と経験の共有

トランザクションは、論理的な操作のグループです。この操作グループを構成する各ユニットは、成功するか失...

Docker は固定コンテナ IP アドレスを実現するためにカスタム ネットワークを作成します。

デフォルトのブリッジ ネットワークのため、コンテナーを再起動すると IP アドレスが変更されます。シ...

mycat を使用して MySQL データベースの読み取りと書き込みの分離を実装する例

MyCATとはエンタープライズアプリケーション開発のための完全にオープンソースの大規模データベースク...

XHTML 1.0 リファレンス

機能別に並べ替えNN: このタグをサポートする Netscape の以前のバージョンを示しますIE:...

vue+element テーブルで動的な列フィルタリングを実装するためのサンプルコード

要件: データをリスト形式で表示する場合、表示すべき情報項目が多く、表が横に長くなってしまいます。表...

ウェブ上でチャートを描くための 9 つの優れた JavaScript フレームワーク スクリプト

ウェブ上でチャートを描くための 9 つの優れた JavaScript フレームワーク スクリプト 1...

DockerでSpringbootプロジェクトを実行する方法

1. IDEAの下にあるターミナルをクリックし、mvn clean installと入力します。 次...

Web2.0: 情報過多の原因と解決策

<br />情報の重複、情報過多、情報強迫、パーソナライズされたカスタマイズ、検索エンジ...

ルート権限なしでログインするためのDockerソリューション

docker コマンドを初めて使用する場合、権限の問題を確認するメッセージが表示されます。 unix...