axiosのシンプルなカプセル化と使用例コード

axiosのシンプルなカプセル化と使用例コード

序文

最近、プロジェクトを構築しているときに、リクエストのカプセル化について考え、どのようにカプセル化するかを考えました。あなたたち大人にとっては小さなことかもしれませんが、私にとっては小さな挑戦でもあります。私の想像では、いくつかの基本的な設定と要求された特定のインターフェースは2つのファイルに配置する必要があるため、axios.jsとapi.jsという2つの新しいファイルを作成しました。

アクシオス

axios.js は主に、baseURL リクエスト インターセプター、レスポンス インターセプターなどの axios の基本的な構成に使用されます。

'axios' から axios をインポートします。
'element-ui' から ElementUI をインポートします。
'element-ui/lib/theme-chalk/index.css' をインポートします。
'../router' からルーターをインポートします。

まず、現在の js に axios を導入します。要素を導入する目的は、そのコンポーネントを現在の js で使用することであり、レスポンス インターセプターでさまざまな戻り値を直接促すことが目的です。レスポンスインターセプターの特定の戻り値に応じてページをリダイレクトするためのルーターが導入されています。たとえば、権限がない場合はログインページにジャンプします。

process.env.NODE_ENV === '開発'の場合{
  axios.defaults.baseURL = 'api';
} そうでない場合 (process.env.NODE_ENV === 'production') {
  axios.defaults.baseURL = 'https://xxxxxxxxx/index/';
}

ベースURL処理では開発環境と本番環境を区別しています

//リクエストインターセプターは、通常のリクエストを送信するときとフォームデータを送信するときのリクエストヘッダーを区別します。axios.interceptors.request.use((config) => {
  config.headers['Content-Type'] = 'application/json';
  if (config.method === 'post') {
    //FormDataのリクエストヘッダー if (Object.prototype.toString.call(config.data) === '[object FormData]') {
      // リクエストインターセプター処理 config.headers['Content-Type'] = 'multipart/form-data';
    } そうでない場合 (Object.prototype.toString.call(config.data) === '[object String]') {
      config.headers['Content-Type'] = 'application/x-www-form-urlencoded';
    }
  } それ以外 {
    config.headers['Content-Type'] = 'application/json';
  }
  設定を返します。
});

//レスポンスインターセプター axios.interceptors.response.use(
  (設定) => {
    値をconfig.dataとします。
    config.status === 200 の場合
      if (typeof value === 'string') {
        if (値 === 'タイムアウト') {
          ElementUI.MessageBox.confirm('操作を長時間行っていないか、操作する権限がありません。ログインページに移動して再度ログインしてください。', 'Prompt', {
            confirmButtonText: '確認'、
            タイプ: '警告'
          }).then(() => {
            router.push({ name: 'ログイン' });
          });
        }それ以外 {
          ElementUI.Message.info(値);
        }
      }
    }
    設定を返します。
  },
  (エラー) => {
    値をerr.response.statusTextとします。
    スイッチ (err.response.status) {
      ケース400:
        ElementUI.Message.error('構文形式が正しくないため、サーバーはこのリクエストを理解できません')
        壊す;
      ケース401:
      ケース403:
      ケース404:
      ケース405:
        ElementUI.Message.warning(値);
        壊す;
      デフォルト:
        ElementUI.Message.error('操作中にエラーが発生しました。この操作は無効です!' + value);
        壊す;
    }
    err.responseを返す
  }
);

レスポンス インターセプターについては、バックエンドから返される値に応じて処理します。バックエンドではあまり作業していないので、単純に戻り値を処理するだけです。

以下はgetとpostのパッケージです

非同期関数 axiosGet(url, params = {}) をエクスポートします。
  res = axios.get(url, { params: params }); を待機します。
  res.status === 200の場合{
    res.dataを返す
  }それ以外 {
    res.statusTextをスローする
  }
}

非同期関数 axiosPost(url, params = {}) をエクスポートします。
  res = axios.post(url, params); を待機します。
  res.status === 200の場合{
    res.dataを返す
  }それ以外 {
    res.statusTextをスローする
  }
}

判定のために戻り値を直接取得するには、async と await を使用します。戻りが成功した場合は戻り値が出力され、失敗した場合はエラーがスローされます。

最後に、カプセル化されたメソッドをエクスポートします

api.js

api.js全体にはプロジェクト内のすべてのインターフェースが保存されます

'./axios' から { axiosGet, axiosPost } をインポートします。

axios.jsを導入し、カプセル化されたaxiosGetとaxiosPostを取得する

エクスポートデフォルト{
  getLogin:(パラメータ = {}) => {
    axiosPost('/login', params) を返します
  },
  getUser:(パラメータ = {}) => {
    axiosGet('http://localhost:3000/user', パラメータ) を返します
  }
}

ここでは2つの簡単なインターフェースを例として使用し、api.jsでの処理は完了しています。

設定されたインターフェースを使用する

この時点でaxiosはパッケージ化されており、次のステップはそれの使用方法を示すことです。

'@/server/api' から DbauditServer をインポートします。
//インターフェイスを呼び出すためにファイルにapi.jsを導入する

formData = 新しいFormData
formData.append('パスワード', this.formLabelAlign.password)
let res1 = await DbauditServer.getLogin(formData) //呼び出すだけで正常に動作します。let res2 = await DbauditServer.getUser()

もちろん、より詳細にすることもできます。なぜなら、get と post をカプセル化すると、エラーの戻り値が直接スローされるからです。したがって、インターフェイスの呼び出しを try catch でラップして、エラーに対して特定の処理を実行することもできます。

要約する

シンプルなカプセル化と axios の使用に関するこの記事はこれで終わりです。axios のシンプルなカプセル化に関するその他の関連コンテンツについては、123WORDPRESS.COM で以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Vue での Axios カプセル化と API インターフェース管理の詳細な説明
  • Vue 2.0 カプセル化の詳細な説明 axios notes
  • Vue で axios とカプセル化を使用するサンプルコード
  • リクエスト内のさまざまな異常な状況を処理するAxiosカプセル化方法
  • Axios カプセル化、インターセプターを使用してインターフェースを均一に処理する、非常に詳細なチュートリアル (推奨)
  • vue axios のカプセル化されたリクエスト ステータスのエラー プロンプト問題を解決する
  • Vue での Axios リクエストのカプセル化の詳細な説明
  • Axios を使用して Vue プロジェクトで http リクエストをカプセル化する方法
  • Vue での Axios の二次カプセル化の例
  • async awaitを使用してaxiosメソッドをカプセル化する

<<:  mysql ビュー関数の分析と使用例

>>:  Linux で yum と入力した後に -bash: /usr/bin/yum: No such file or directory という問題を解決する方法

推薦する

Nginx の負荷分散と動的および静的分離の原理と構成

目次1. Nginxは負荷分散の原則を実装する2. Nginxの動的および静的分離の原則Nginx ...

MySQL 8.0.15 winx64 圧縮パッケージのインストールと設定方法のグラフィックチュートリアル

この記事では、MySQL 8.0.15 winx64 圧縮パッケージのインストールと設定方法を参考ま...

mysql5.7.22 ダウンロードプロセス図

1. 公式ウェブサイト www.mysql.com にアクセスし、ダウンロードを選択します。 2. ...

Ubuntu環境でのSSHの詳細なインストールと使用

SSH は Secure Shell の略で、安全な伝送プロトコルです。Ubuntu クライアントは...

使用場所によって混乱しやすいXHTMLタグ

<br />jb51.net では、常に記事のセマンティクスを重視してきましたが、HTM...

Vue3における7種類のコンポーネント通信の詳細

目次1. Vue3コンポーネント通信方式2. Vue3通信の使い方2.1 小道具2.2 $エミット2...

react-beautiful-dnd を使用してリスト間のドラッグ アンド ドロップを実装する

目次react-beautiful-dndを選ぶ理由基本的な使い方基本概念使い方使用中に発生した問題...

シェアしたい絶妙なApple風無料アイコン素材18セット

Apple マグカップのアイコンと追加機能 HD ストレージボックス – アドオンパックセイバースノ...

雨滴効果を実現する JavaScript キャンバス

この記事では、雨滴効果を実現するためのJavaScriptキャンバスの具体的なコードを参考までに紹介...

HTMLフォーム要素の包括的な理解

以下のように表示されます。 XML/HTML コードコンテンツをクリップボードにコピー<!DO...

IE5.0以降のHTCコンポーネントの定義の概要

Microsoft IE 5.0 がリリースされる前は、Web プログラミングにおける最大の課題は、...

MySQL のバイナリおよび varbinary データ型の詳細な説明

序文BINARY と VARBINARY は、文字列ではなくバイナリ文字列を格納する点を除いて、CH...

vitrualBox+ubuntu16.04 python3.6 最新チュートリアルと詳細な手順のインストール

最近ディープラーニングを学ぶためにUbuntu+Python 3.6バージョンを使う必要があるため、...

ブログデザイン ウェブデザイン デビュー

私がデザインした最初の Web ページは次のとおりです。 私はこの業界に7年間在籍し、プログラミング...

HTML(CSSスタイル仕様)を読む必要があります

CSS スタイル仕様1. クラスセレクター2. タグセレクター3. IDセレクター4. CSSスタイ...