Vueとaxiosのインターフェース管理を統合する方法

不言
リリース: 2018-07-23 14:59:25
オリジナル
2396 人が閲覧しました

axios を介してインターフェイスをリクエストするのは非常に簡単です。 axios リクエストがカプセル化されている場合、API は 1 か所のみでメソッドとして設定でき、使用時にこのメソッドを直接呼び出すことができます。それなら、あまり苦労する必要はありません。

ただし、各インターフェースを長々とした axios リクエスト メソッドとして定義する必要はありません。シンプルにしたいので、シンプルな設定を 1 か所で完了するようにしてください。

1. APIインターフェースを設定します

例えば、グローバルサービスの設定として、srcのservices配下にglobal.jsを定義しました。このサービスのメソッドの構成として。

例:

name フィールドは後で呼び出されるメソッドの名前として使用されますが、これは単なる単純なオブジェクトです。これをメソッドに変換します。

2. インターフェース設定の配列オブジェクトをメソッドに変換します

import axios from "axios";

const withAxios = apiConfig => {
  const serviceMap = {};
  apiConfig.map(({ name, url, method }) => {
    serviceMap[name] = async function(data = {}) {
      let key = "params";      if (method === "post" || method === "put") {
        key = "data";
      }      return axios({
        method,
        url: "/api" + url,
        [key]: data
      });
    };
  });  return serviceMap;
};

export default withAxios;
ログイン後にコピー

このメソッドの機能は、API 設定ファイルをメソッドを含むオブジェクトに変換することです。

3. API 構成ファイルで withAxios

import withAxios from "../utils/withAxios";

const apiConfig = [
  {
    name: "userLogin",
    url: "/login",
    method: "get"
  },
  {
    name: "getUserInfo",
    url: "/login/user",
    method: "get"
  },
  {
    name: "getDeptList",
    url: "/login/department",
    method: "get"
  }
];

export default withAxios(apiConfig);
ログイン後にコピー

を使用して、パッケージ化されたオブジェクトを直接エクスポートします。

4. vuex で使用する

vuex で API を呼び出したい場合は、まずエクスポートしたオブジェクトをインポートします

import GlobalService from "@/services/global";
ログイン後にコピー

アクション内でインターフェイスを呼び出します:

const { data } = await GlobalService.userLogin(payload);
ログイン後にコピー

以上です。その後、インターフェイス呼び出しを完了するために必要な設定と呼び出しの 2 つの手順だけが必要となり、インターフェイスのセマンティクスも明確になります。

5. axios のその他の設定

utils の withAxios で axios の共通設定を行うことができます。

たとえば、認証は各リクエスト ヘッダーに自動的に含まれます:

axios.defaults.headers.common["Authorization"] = getCookie("jwt") || "";// 注意:此处只会在web应用初始化时配置,在登录成功后需重新配置Authorization。
ログイン後にコピー

たとえば、インターセプタを使用して返されたオブジェクトを均一に処理する:

axios.interceptors.response.use(response => {
  const { data } = response;  if (data.status === -2) {
    Vue.prototype.$Message.error(`无效的登录信息或登录已失效,请重新登录`);
    delCookie("jwt");
    router.push({ path: "/login" });
  }  if (data.status === -1) {
    Vue.prototype.$Message.error(`发生错误[${data.message}]`);
  }  return response;
});
ログイン後にコピー

関連する推奨事項:

vue axios リクエスト タイムアウトに対処する方法

以上がVueとaxiosのインターフェース管理を統合する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート