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=>{});