亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Vue封裝Axios請求和攔截器的步驟

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

PS:本文代碼在vue-cli3構建的基礎vue項目之上進行編寫:vue create my-project

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

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

  之前初學的時候,經常將axios數據請求寫在各組件方法內,但實踐證明,如果項目接口變動要修改url地址等參數會比較為麻煩,不易維護,于是需要對axios進行封裝并將接口統一管理。

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

一、新建函數文件

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

二、對axios進行封裝

axios-request.js代碼如下:

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

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

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

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

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

三、對接口進行統一管理

axios-api.js代碼如下:

import axiosService from "./axios-request"; // 從axios-request.js內引入axiosService

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

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

  這里要注意下,post參數放在data內,get參數放在params內!

四、在組件內使用寫好的接口

  在組件中使用:

  下面是模擬的一個登錄接口,代碼不太嚴謹,僅演示大致用法:

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

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("賬號或密碼不能為空");
  } else {
  if (username.length < 51 && password.length < 51) {
   let res = await userLogin(params);
   console.log(res);
  } else {
   alert("賬號或密碼輸入字符不能超過50位");
  }
  }
 }
 }
};
</script>

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

五、總結

  當然也可以不將接口統一管理,而只用axios封裝,然后在組件內寫異步請求函數。
  以上是個人在之前學習的時候,所用的封裝方式,如有錯誤之處歡迎留言指正。

以上就是Vue封裝Axios請求和攔截器的步驟的詳細內容,更多關于Vue封裝的資料請關注腳本之家其它相關文章!

相關文章

  • VUE v-model表單數據雙向綁定完整示例

    VUE v-model表單數據雙向綁定完整示例

    這篇文章主要介紹了VUE v-model表單數據雙向綁定,結合完整實例形式分析了vue.js實現表單數據雙向綁定相關操作技巧,需要的朋友可以參考下
    2019-01-01
  • 詳解Vue如何自定義hooks(組合式)函數

    詳解Vue如何自定義hooks(組合式)函數

    這篇文章主要為大家詳細介紹了在Vue中如何實現自定義hooks(組合式)函數,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2023-03-03
  • vue子組件通過.sync修飾符修改props屬性方式

    vue子組件通過.sync修飾符修改props屬性方式

    這篇文章主要介紹了vue子組件通過.sync修飾符修改props屬性方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • vue3中如何使用Pinia實現數據持久化操作

    vue3中如何使用Pinia實現數據持久化操作

    使用vue3中的pinia,我們可以在多個頁面間共享數據,但是一旦我們關閉或刷新頁面,這些數據就會丟失,因此,我們需要有一種數據持久化的解決方案,下面我們就來看看具體如何解決的吧
    2023-10-10
  • vue+elementUI實現動態(tài)合并數據相同的單元格(可指定合并列)

    vue+elementUI實現動態(tài)合并數據相同的單元格(可指定合并列)

    這篇文章主要介紹了vue+elementUI如何實現動態(tài)合并數據相同的單元格,文中有詳細的代碼實例供大家參考,具有一定的參考價值,需要的朋友可以參考下
    2023-07-07
  • vue 路由頁面之間實現用手指進行滑動的方法

    vue 路由頁面之間實現用手指進行滑動的方法

    下面小編就為大家分享一篇vue 路由頁面之間實現用手指進行滑動的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨跟隨小編過來看看吧
    2018-02-02
  • Element InfiniteScroll無限滾動的具體使用方法

    Element InfiniteScroll無限滾動的具體使用方法

    這篇文章主要介紹了Element InfiniteScroll無限滾動的具體使用方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-07-07
  • Vue $mount實戰(zhàn)之實現消息彈窗組件

    Vue $mount實戰(zhàn)之實現消息彈窗組件

    這篇文章主要介紹了Vue $mount實現消息彈窗組件的相關知識,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-04-04
  • vue開發(fā)公共組件之返回頂部

    vue開發(fā)公共組件之返回頂部

    這篇文章主要為大家詳細介紹了vue開發(fā)公共組件之返回頂部,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • vue實現計步器功能

    vue實現計步器功能

    這篇文章主要為大家詳細介紹了vue實現計步器功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-11-11

最新評論