首頁 > web前端 > js教程 > 主體

如何實現Vue和axios的介面管理統一

不言
發布: 2018-07-23 14:59:25
原創
2377 人瀏覽過

透過axios請求介面是很簡單的,若是把axios請求再封裝一下的話,這樣api就可以只在一處配置成方法,在使用的時候就可以直接呼叫這個方法。那就不需要太麻煩了。

但咱們不用每個介面都定義成一個囉嗦的axios請求方法,既然是想簡單點,就盡量只在一處完成簡單的設定。

1、設定api介面

將同一模組的介面放在一個檔案下,例如我在src的services下定義了一個global.js作為全域服務的配置,在它裡面配置的api可以作為這個服務的方法。

例如:

 

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;
登入後複製

我們在utils下定義了一個通用的方法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);
登入後複製

直接export出包裝後的物件即可。

4、在vuex中使用

想在vuex中呼叫某個api,首先import剛才導出的物件

import GlobalService from "@/services/global";
登入後複製

在action中呼叫某個介面:

const { data } = await GlobalService.userLogin(payload);
登入後複製

這樣就完事了。之後只需要配置-調用這麼兩步就可以完成接口調用,而且接口的語意化也更明確了。

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中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!