最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Vue封裝Axios請(qǐng)求和攔截器的步驟

 更新時(shí)間:2020年09月16日 09:20:23   作者:文淵  
這篇文章主要介紹了Vue封裝Axios請(qǐng)求和攔截器的步驟,幫助大家更好的對(duì)axios進(jìn)行封裝并將接口統(tǒng)一管理,同時(shí)為請(qǐng)求和響應(yīng)設(shè)置攔截器interceptors。,感興趣的朋友可以了解下

PS:本文代碼在vue-cli3構(gòu)建的基礎(chǔ)vue項(xiàng)目之上進(jìn)行編寫:vue create my-project

  axios 是一個(gè)基于 promise 的 http 庫(kù),可以用在瀏覽器和 node.js 中, 也是vue官方推薦使用的http庫(kù)。

  axios很好用,其中之一就是它的攔截器十分強(qiáng)大,我們可以為請(qǐng)求和響應(yīng)設(shè)置攔截器,比如請(qǐng)求攔截器可以在每個(gè)請(qǐng)求里加上token,做了統(tǒng)一處理后維護(hù)起來(lái)也方便,響應(yīng)攔截器可以在接收到響應(yīng)后先做一層操作,如根據(jù)狀態(tài)碼判斷登錄狀態(tài)、授權(quán)。

  之前初學(xué)的時(shí)候,經(jīng)常將axios數(shù)據(jù)請(qǐng)求寫在各組件方法內(nèi),但實(shí)踐證明,如果項(xiàng)目接口變動(dòng)要修改url地址等參數(shù)會(huì)比較為麻煩,不易維護(hù),于是需要對(duì)axios進(jìn)行封裝并將接口統(tǒng)一管理。

  當(dāng)然在最之前,我們需要安裝axios,使用命令 npm install axios --save 即可。

一、新建函數(shù)文件

  在 src目錄 下新建一個(gè) axios目錄,然后在里面創(chuàng)建 axios-request.js 和 axios-api.js 兩個(gè)文件,
  其中 aixos-request.js 用于對(duì)axios進(jìn)行封裝,axios-api.js 用于接口的統(tǒng)一管理。   

二、對(duì)axios進(jìn)行封裝

axios-request.js代碼如下:

import axios from "axios";
import { Message } from "element-ui";

// 創(chuàng)建一個(gè)axios實(shí)例
const axiosService = axios.create({
 baseURL: process.env.VUE_APP_BASE_API, // url = base url + request url
 timeout: 5000 // 設(shè)置超時(shí)時(shí)間為5s
});

// request攔截器 ==> 對(duì)請(qǐng)求參數(shù)進(jìn)行處理
axiosService.interceptors.request.use(
 config => {
 // 可以在發(fā)送請(qǐng)求之前做些事情
 // 比如請(qǐng)求參數(shù)的處理、在headers中攜帶token等等
 return config;
 }, error => {
 // 處理請(qǐng)求錯(cuò)誤
 console.log(error); // for debug
 Promise.reject(error);
 }
);

// respone攔截器 ==> 對(duì)響應(yīng)做處理
axiosService.interceptors.response.use(
 response => {
 const res = response.data;
 // 如果自定義的返回碼不等于200, 就返回一個(gè)錯(cuò)誤
 if (res.code !== 200) {
  return Promise.reject(new Error(res.message || "Error"))
 } else {
  return res;
 }
 }, error => {
 // 判斷error的status代碼,并將對(duì)應(yīng)的信息告知用戶
 let text = "";
 let err = JSON.parse(JSON.stringify(error));
 if (err.response.status) {
  switch (error.response.status) {
  case 400:
   text = "請(qǐng)求錯(cuò)誤(400),請(qǐng)重新申請(qǐng)";
   break;
  case 401:
   text = "登錄錯(cuò)誤(401),請(qǐng)重新登錄";
   return this.$router.replace("/login");
  case 403:
   text = "拒絕訪問(wèn)(403)";
   break;
  case 404:
   text = "請(qǐng)求出錯(cuò)(404)";
   break;
  case 408:
   text = "請(qǐng)求超時(shí)(408)";
   break;
  case 500:
   text = "服務(wù)器錯(cuò)誤(500),請(qǐng)重啟軟件或切換功能頁(yè)!";
   break;
  case 501:
   text = "服務(wù)未實(shí)現(xiàn)(501)";
   break;
  case 502:
   text = "網(wǎng)絡(luò)錯(cuò)誤(502)";
   break;
  case 503:
   text = "服務(wù)不可用(503)";
   break;
  case 504:
   text = "網(wǎng)絡(luò)超時(shí)(504)";
   break;
  case 505:
   text = "HTTP版本不受支持(505)";
   break;
  default:
   text = "網(wǎng)絡(luò)連接出錯(cuò)";
  }
 } else {
  text = "連接服務(wù)器失敗,請(qǐng)退出重試!";
 }
 Message({
  showClose: true,
  message: text,
  type: "error"
 });
 return Promise.reject(error);
 }
);

// 將寫好的axios實(shí)例暴露出去
export default axiosService;

三、對(duì)接口進(jìn)行統(tǒng)一管理

axios-api.js代碼如下:

import axiosService from "./axios-request"; // 從axios-request.js內(nèi)引入axiosService

// 下面是POST形式
export const userLogin = data => {
 return axiosService({
 url: "/xxxx/user/xxxx", // 根據(jù)實(shí)際接口地址來(lái)寫
 method: "post",
 data
 });
};

// 下面是GET形式
export const userInfo = params => {
 return axiosService({
 url: "/xxxx/user/xxxx", // 根據(jù)實(shí)際接口地址來(lái)寫
 method: "get",
 params
 });
};

  這里要注意下,post參數(shù)放在data內(nèi),get參數(shù)放在params內(nèi)!

四、在組件內(nèi)使用寫好的接口

  在組件中使用:

  下面是模擬的一個(gè)登錄接口,代碼不太嚴(yán)謹(jǐn),僅演示大致用法:

<script>
import {userLogin} from "@/axios/axios-api"; // 引入登錄接口函數(shù)

export default {
 name: "login",
 components: {},
 methods: {
 async login() {
  let username = this.username;
  let password = this.password;
  let params = {
  username: username,
  password: password
  };
  if (!username || !password) {
  alert("賬號(hào)或密碼不能為空");
  } else {
  if (username.length < 51 && password.length < 51) {
   let res = await userLogin(params);
   console.log(res);
  } else {
   alert("賬號(hào)或密碼輸入字符不能超過(guò)50位");
  }
  }
 }
 }
};
</script>

  上面的代碼中我們用了 async await,是ES7新出的特性,具體用法可以Google或者到MDN上查看。

五、總結(jié)

  當(dāng)然也可以不將接口統(tǒng)一管理,而只用axios封裝,然后在組件內(nèi)寫異步請(qǐng)求函數(shù)。
  以上是個(gè)人在之前學(xué)習(xí)的時(shí)候,所用的封裝方式,如有錯(cuò)誤之處歡迎留言指正。

以上就是Vue封裝Axios請(qǐng)求和攔截器的步驟的詳細(xì)內(nèi)容,更多關(guān)于Vue封裝的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Vue數(shù)據(jù)監(jiān)聽(tīng)器watch和watchEffect的使用

    Vue數(shù)據(jù)監(jiān)聽(tīng)器watch和watchEffect的使用

    今天我們來(lái)學(xué)習(xí)一下watch監(jiān)聽(tīng)器和它的好兄弟watchEffect監(jiān)聽(tīng)器。這個(gè)相對(duì)來(lái)說(shuō)比較簡(jiǎn)單,用的不是很多,當(dāng)然了,根據(jù)自己的項(xiàng)目情況自行決定使用,希望對(duì)大家有所幫助
    2023-02-02
  • Vue的transition-group與Virtual Dom Diff算法的使用

    Vue的transition-group與Virtual Dom Diff算法的使用

    這篇文章主要介紹了Vue的transition-group與Virtual Dom Diff算法的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • el-form表單實(shí)現(xiàn)校驗(yàn)的示例代碼

    el-form表單實(shí)現(xiàn)校驗(yàn)的示例代碼

    本文主要介紹了el-form表單實(shí)現(xiàn)校驗(yàn)的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-07-07
  • vue中的mixins混入使用方法

    vue中的mixins混入使用方法

    這篇文章主要介紹了vue中的mixins混入使用方法,混入又分全局混入混入局部混入,下文對(duì)兩者都有相關(guān)介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-04-04
  • vue3中如何使用live2D

    vue3中如何使用live2D

    本文介紹了如何在Vue3項(xiàng)目中整合Live2D技術(shù),從Live2D的基本介紹到在Vue3中的具體實(shí)現(xiàn)方法,Live2D技術(shù)允許開(kāi)發(fā)者將二維圖像轉(zhuǎn)化為可動(dòng)畫的三維模型,主要應(yīng)用于游戲、虛擬角色等領(lǐng)域,文章詳細(xì)說(shuō)明了在vue3項(xiàng)目中使用Live2D的步驟,感興趣的朋友一起看看吧
    2024-10-10
  • vuex實(shí)現(xiàn)像調(diào)用模板方法一樣調(diào)用Mutations方法

    vuex實(shí)現(xiàn)像調(diào)用模板方法一樣調(diào)用Mutations方法

    今天小編就為大家分享一篇vuex實(shí)現(xiàn)像調(diào)用模板方法一樣調(diào)用Mutations方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-11-11
  • vue?this.$router.go(-1);返回時(shí)如何帶參數(shù)

    vue?this.$router.go(-1);返回時(shí)如何帶參數(shù)

    這篇文章主要介紹了vue?this.$router.go(-1);返回時(shí)如何帶參數(shù)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • Element中Upload組件上傳功能實(shí)現(xiàn)(圖片和文件的默認(rèn)上傳及自定義上傳)

    Element中Upload組件上傳功能實(shí)現(xiàn)(圖片和文件的默認(rèn)上傳及自定義上傳)

    這篇文章主要介紹了Element中Upload組件上傳功能實(shí)現(xiàn)包括圖片和文件的默認(rèn)上傳及自定義上傳,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2024-01-01
  • Vue3結(jié)合TypeScript項(xiàng)目開(kāi)發(fā)實(shí)戰(zhàn)記錄

    Vue3結(jié)合TypeScript項(xiàng)目開(kāi)發(fā)實(shí)戰(zhàn)記錄

    聽(tīng)說(shuō)有的公司已經(jīng)開(kāi)始用vue3了 趕緊打開(kāi)B站學(xué)一下,下面這篇文章主要給大家介紹了關(guān)于Vue3結(jié)合TypeScript項(xiàng)目開(kāi)發(fā)實(shí)戰(zhàn)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2021-09-09
  • Element MessageBox彈框的具體使用

    Element MessageBox彈框的具體使用

    這篇文章主要介紹了Element MessageBox彈框的具體使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07

最新評(píng)論

来安县| 石首市| 达孜县| 桂平市| 临湘市| 蒲城县| 通许县| 读书| 白城市| 焦作市| 宜都市| 蒲江县| 洱源县| 南投县| 垦利县| 枝江市| 资阳市| 江安县| 和平县| 和田县| 广德县| 大庆市| 抚宁县| 临城县| 克拉玛依市| 容城县| 阿克陶县| 中超| 温宿县| 修文县| 新密市| 贵阳市| 漯河市| 武清区| 郁南县| 孝义市| 甘洛县| 阿拉善左旗| 裕民县| 思南县| 永吉县|