axios全局配置及攔截器


axios使用說明文檔

axios 全局配置:

//axios-init.js 
   import axios from 'axios';

   let loadingInstance; //創建Loading 的實例
   axios.defaults.baseURL = appConfig.xhr.baseURL; // 配置axios請求的地址
   axios.defaults.headers.post['Content-Type'] = 'application/json; charset=utf-8';
   axios.defaults.crossDomain = true;
   axios.defaults.withCredentials = true;  //設置cross跨域 並設置訪問權限 允許跨域攜帶cookie信息
   axios.defaults.headers.common['Authorization'] = ''; // 設置請求頭為 Authorization

攔截器:

應用場景:
1:每個請求都帶上的參數,比如token,時間戳等。
2:對返回的狀態進行判斷,比如token是否過期
請求:
// 請求攔截器
axios.interceptors.request.use(
  config => {
    // 每次發送請求之前判斷vuex中是否存在token
    // 如果存在,則統一在http請求的header都加上token,這樣后台根據token判斷你的登錄情況
    // 即使本地存在token,也有可能token是過期的,所以在響應攔截器中要對返回狀態進行判斷
    const token = window.localStorage.getItem("token");
    token && (config.headers.Authorization = token);
    return config;
  },
  error => {
    return Promise.error(error);
  }
);
 
         
響應: 
axios.interceptors.response.use(
  response => {
    // 如果返回的狀態碼為200,說明接口請求成功,可以正常拿到數據
    // 否則的話拋出錯誤
    if (response.status === 200) {
      return Promise.resolve(response);
    } else {
      return Promise.reject(response);
    }
  },
  // 服務器狀態碼不是2開頭的的情況
  // 這里可以跟你們的后台開發人員協商好統一的錯誤狀態碼
  // 然后根據返回的狀態碼進行一些操作,例如登錄過期提示,錯誤提示等等
  // 下面列舉幾個常見的操作,其他需求可自行擴展
  error => {
    if (error.response.status) {
      switch (error.response.status) {
        // 401: 未登錄
        // 未登錄則跳轉登錄頁面,並攜帶當前頁面的路徑
        // 在登錄成功后返回當前頁面,這一步需要在登錄頁操作。
        case 401:
          vant.Toast.fail("身份驗證失敗,請關閉重新進入。");
          break;

        // 403 token過期
        // 登錄過期對用戶進行提示
        // 清除本地token和清空vuex中token對象
        // 跳轉登錄頁面
        case 403:
          vant.Toast.fail("登錄過期,請關閉重新進入。");
          // 清除token
          break;

        // 404請求不存在
        case 404:
          vant.Toast.fail("您訪問的網頁不存在。");
          break;
        // 其他錯誤,直接拋出錯誤提示
        default:
          vant.Toast.fail(error.response.data.message);
      }
      return Promise.reject(error.response);
    }
  }
);

 

 
         

最后在main.js里面引入

//import axios from "axios";
import axiosInit from "./axios-init";

//普通用法:
axios.post(url, params).then((res)=>{

}).catch((err)=>{

})

//把axios 作為Vue的原型屬性
window.axios = axiosInit();
Vue.prototype.$http = window.axios;

//頁面運用
this.$http.post(url, params).then(res=>{}).catch(error=>{});

 



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM