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 という問題を解決する方法

推薦する

JSは円形のプログレスバーのドラッグとスライドを実装します

この記事の例では、円形のプログレスバーのドラッグアンドスライドを実現するための具体的なJSコードを紹...

CSS 動的高さ遷移アニメーション効果の実装

この質問は、Nuggets のメッセージから生まれました。友人が、次のコードの高さ遷移アニメーション...

Nodejs プラグインと使用方法の概要

このチュートリアルの動作環境: Windows 7 システム、nodejs バージョン 12.19....

よく使われる HTML タグとその特徴の完全なリスト

まず、HTML タグのいくつかの特性を知っておく必要があります。 1. 「<keyword&g...

Web開発でボックスを中央に配置するいくつかの方法

1. ボックスを中央に配置するいくつかの方法を記録します。 1.0、マージン幅固定、高さ中央配置。 ...

CentOS7にJDK8をrpmモードでインストールする

CentOS 7が正常にインストールされると、OpenJDKのJREがデフォルトでインストールされて...

CSS で隠し要素を実現する 7 つの興味深い方法

序文非表示要素の 3 つの属性である表示、可視性、不透明度の類似点と相違点は、フロントエンドの就職面...

React NativeプロジェクトでLottieアニメーションを使用する方法

Lottie は、Airbnb が開発した iOS、Android、React Native 向けの...

MySQL テーブルを削除するときに外部キー制約を無視するシンプルな実装

テーブルを削除することはあまり一般的ではありませんが、特に外部キーの関連付けがあるテーブルの場合は、...

HTML のセルパディングとセルスペース属性を図で説明します

セル - 表の内容 セルの余白 (表の余白) (cellpadding) - セルの外側の距離を表し...

Tomcat9 Windows サービスのインストールに関する詳細なチュートリアル

1. 準備1.1 service.bat を含む tomcat 圧縮パッケージをダウンロードします。...

InnoDB がシリアル化分離レベルを実装する方法

シリアル化の実装InnoDB は 2 つの方法でシリアル化を実装します。まず、SELECT 文が明示...

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

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

HTMLでアンカーの位置を設定するためのいくつかの一般的な方法

HTML でアンカーの位置を設定する方法はいくつかあるので、ここで紹介します。 1. ID ポジショ...

VantフレームワークをWeChatアプレットに導入するプロセス全体の記録

序文WeChat ミニプログラムのネイティブ UI が少し物足りないと感じることがあるので、サードパ...