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複合インデックスの概要

ブログ    

推薦する

Mysqlサーバーのインストール、構成、起動、シャットダウン方法の詳細な説明

1. 公式サイトからダウンロード: https://dev.mysql.com/downloads/...

ホストがアクセスできるようにMySQLの権限を変更する方法

mysqlのリモートアクセス権を有効にするデフォルトでは、MySQL ユーザーにはリモート アクセス...

Ubuntu のインストール グラフィック ドライバーと Cuda チュートリアル

目次1. 元のドライバーをアンインストールする2. 新しいグラフィックカードドライバーをダウンロード...

Bootstrap FileInputは画像アップロード機能を実装します

この記事の例では、Bootstrap FileInputの具体的なコードを共有して、画像アップロード...

MySQL データベースのマスター・スレーブ レプリケーションと読み取り/書き込み分離

目次1. マスタースレーブレプリケーションマスタースレーブレプリケーション3スレッドマスタースレーブ...

Apache Web サーバーを使用して 2 つ以上のサイトを構成する方法

人気があり強力な Apache Web サーバーで 2 つ以上のサイトをホストする方法。前回の記事で...

子ども向けウェブサイトの視覚構造レイアウト設計手法の分析

1. 温かくて優しい関連アドレス: http://www.web-designers.cn/post...

マインスイーパゲームを実装するための jQuery プラグイン (3)

この記事では、jQueryプラグインを使用してマインスイーパゲームを実装する方法に関する3番目の記事...

コンテンツタイプの説明、つまりHTTPリクエストヘッダーのタイプ

コンテンツ タイプについて学ぶには、まずそれが何であるか、そして何に使用されるかを知る必要があります...

VueでTypeScriptを使用する方法

導入近年、TypeScript を求める声がますます高まり、TypeScript はフロントエンドに...

type="file" の入力ボックスのスタイル変更の概要

入力タイプ「file」とは何ですか?これが何なのかは説明する必要はないと思います。誰もが知っているこ...

CSS トップに戻る コード例

最近のウェブサイトのほとんどはページが長く、4 画面または 5 画面の長さのものもあれば、2 画面ま...

Docker バインディング固定 IP/クロスホストコンテナ相互アクセス操作

序文これまでは、パイプワークで割り当てた静的 IP は一時的なものであり、再起動すると無効になってい...

MySQLトランザクションを実行するための構文とプロセスの詳細な説明

概要: MySQL は、トランザクションをサポートするためにさまざまなストレージ エンジンを提供しま...