国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

Vue中axios的封裝(報錯、鑒權(quán)、跳轉(zhuǎn)、攔截、提示)

2024-05-06 15:35:44
字體:
供稿:網(wǎng)友
統(tǒng)一捕獲接口報錯 彈窗提示 報錯重定向 基礎(chǔ)鑒權(quán) 表單序列化

實現(xiàn)的功能

統(tǒng)一捕獲接口報錯 : 用的axios內(nèi)置的攔截器 彈窗提示: 引入 Element UI 的 Message 組件 報錯重定向: 路由鉤子 基礎(chǔ)鑒權(quán): 服務(wù)端過期時間戳和token,還有借助路由的鉤子 表單序列化: 我這邊直接用 qs (npm模塊),你有時間也可以自己寫

用法及封裝

用法

// 服務(wù)層 , import默認(rèn)會找該目錄下index.js的文件,這個可能有小伙伴不知道// 可以去了解npm的引入和es6引入的理論概念import axiosPlugin from "./server"; Vue.use(axiosPlugin);對axios的封裝(AXIOS: index.js )import axios from "axios";import qs from "qs";import { Message } from "element-ui";import router from "../router";const Axios = axios.create({ baseURL: "/", // 因為我本地做了反向代理 timeout: 10000, responseType: "json", withCredentials: true, // 是否允許帶cookie這些 headers: {  "Content-Type": "application/x-www-form-urlencoded;charset=utf-8" }});//POST傳參序列化(添加請求攔截器)Axios.interceptors.request.use( config => {  // 在發(fā)送請求之前做某件事  if (   config.method === "post"  ) {   // 序列化   config.data = qs.stringify(config.data);   // 溫馨提示,若是貴公司的提交能直接接受json 格式,可以不用 qs 來序列化的  }  // 若是有做鑒權(quán)token , 就給頭部帶上token  // 若是需要跨站點,存放到 cookie 會好一點,限制也沒那么多,有些瀏覽環(huán)境限制了 localstorage 的使用  // 這里localStorage一般是請求成功后我們自行寫入到本地的,因為你放在vuex刷新就沒了  // 一些必要的數(shù)據(jù)寫入本地,優(yōu)先從本地讀取  if (localStorage.token) {   config.headers.Authorization = localStorage.token;  }  return config; }, error => {  // error 的回調(diào)信息,看貴公司的定義  Message({   // 餓了么的消息彈窗組件,類似toast   showClose: true,   message: error && error.data.error.message,   type: 'error'  });  return Promise.reject(error.data.error.message); });//返回狀態(tài)判斷(添加響應(yīng)攔截器)Axios.interceptors.response.use( res => {  //對響應(yīng)數(shù)據(jù)做些事  if (res.data && !res.data.success) {   Message({    // 餓了么的消息彈窗組件,類似toast    showClose: true,    message: res.data.error.message.message     ? res.data.error.message.message     : res.data.error.message,    type: "error"   });   return Promise.reject(res.data.error.message);  }  return res; }, error => {  // 用戶登錄的時候會拿到一個基礎(chǔ)信息,比如用戶名,token,過期時間戳  // 直接丟localStorage或者sessionStorage  if (!window.localStorage.getItem("loginUserBaseInfo")) {   // 若是接口訪問的時候沒有發(fā)現(xiàn)有鑒權(quán)的基礎(chǔ)信息,直接返回登錄頁   router.push({    path: "/login"   });  } else {   // 若是有基礎(chǔ)信息的情況下,判斷時間戳和當(dāng)前的時間,若是當(dāng)前的時間大于服務(wù)器過期的時間   // 乖乖的返回去登錄頁重新登錄   let lifeTime =    JSON.parse(window.localStorage.getItem("loginUserBaseInfo")).lifeTime *    1000;   let nowTime = new Date().getTime(); // 當(dāng)前時間的時間戳   console.log(nowTime, lifeTime);   console.log(nowTime > lifeTime);   if (nowTime > lifeTime) {    Message({     showClose: true,     message: "登錄狀態(tài)信息過期,請重新登錄",     type: "error"    });    router.push({     path: "/login"    });   } else {    // 下面是接口回調(diào)的satus ,因為我做了一些錯誤頁面,所以都會指向?qū)?yīng)的報錯頁面    if (error.response.status === 403) {     router.push({      path: "/error/403"     });    }    if (error.response.status === 500) {     router.push({      path: "/error/500"     });    }    if (error.response.status === 502) {     router.push({      path: "/error/502"     });    }    if (error.response.status === 404) {     router.push({      path: "/error/404"     });    }   }  }  // 返回 response 里的錯誤信息  let errorInfo = error.data.error ? error.data.error.message : error.data;  return Promise.reject(errorInfo); });// 對axios的實例重新封裝成一個plugin ,方便 Vue.use(xxxx)export default { install: function(Vue, Option) {  Object.defineProperty(Vue.prototype, "$http", { value: Axios }); }};            
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 天镇县| 宜川县| 谢通门县| 裕民县| 屏东市| 海兴县| 商河县| 嘉善县| 普陀区| 保亭| 五指山市| 磴口县| 刚察县| 顺昌县| 海原县| 广汉市| 巍山| 武清区| 瑞金市| 隆子县| 包头市| 安阳市| 道孚县| 图片| 灯塔市| 新巴尔虎左旗| 科技| 平湖市| 龙海市| 双桥区| 东平县| 青田县| 育儿| 绵竹市| 兴国县| 科尔| 长春市| 罗田县| 中西区| 资溪县| 四会市|