From d6ce782681c1507fc19557f5c525f3215f41a9b8 Mon Sep 17 00:00:00 2001 From: lilinyuan <1084668738@qq.com> Date: Fri, 29 Mar 2024 15:45:14 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0request?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/utils/request.js | 96 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 96 insertions(+) create mode 100644 src/utils/request.js diff --git a/src/utils/request.js b/src/utils/request.js new file mode 100644 index 0000000..a1d99e7 --- /dev/null +++ b/src/utils/request.js @@ -0,0 +1,96 @@ +import axios from "axios"; +import { AxiosCanceler } from "./axiosCanceler"; +import { ElMessageBox, ElNotification } from "element-plus"; +import { getToken, removeToken } from "./auth"; + +axios.defaults.headers['Content-Type']='application/json' + +const serveice = axios.create({ + baseURL: import.meta.env.VITE_BASE_URL, + timeout: 6000 +}) +const axiosCanceler = new AxiosCanceler() +serveice.interceptors.request.use(config=>{ + const ACCESS_TOKEN = getToken() || '' + if(ACCESS_TOKEN!==undefined && ACCESS_TOKEN!=='') { + config.headers['Authorization']=ACCESS_TOKEN + } + // 检查是否有重复请求, 有则取消掉 + axiosCanceler.removePendingRequest(config) + // 将请求加入pendingMap + axiosCanceler.addPendingRequest(config) + return config +},error=>{ + Promise.reject(error) +}) +serveice.interceptors.response.use(response=>{ + axiosCanceler.removePendingRequest(response.config) + //二进制数据直接返回 + if(response.request.responseType === 'blob' || response.request.responseType === 'arraybuffer') { + return response.data + } + return response.data +},error=>{ + let response = error.response + const status = response.status; + switch(status) { + case 401: + ElMessageBox.confirm('登录状态已过期,请重新登录','系统提示',{ + confirmButtonText: '重新登录', + cancelButtonText: '取消', + type: 'warning', + closeOnClickModal: false + }).then(()=>{ + removeToken() + window.location = '/login' + }) + return Promise.reject('会话已过期,请重新登录') + case 402: + break; + case 403: + console.log(response) + ElNotification({ + title: '系统提示', + message: response.data.msg, + type: 'warning' + }) + break; + case 404: + ElNotification({ + title: '系统提示', + message: '不存在的地址', + type: 'error' + }) + break; + case 405: + ElNotification({ + title: '系统提示', + message: '传输格式错误,请检查', + type: 'error' + }) + break; + case 511: + ElNotification({ + title: '系统提示', + message: '禁止访问', + type: 'error' + }) + removeToken() + window.location = '/forbidden' + break; + case 500: + if (response.data){ + return response.data + }else { + ElNotification({ + title: '系统提示', + message: '系统未知错误', + type: 'error' + }) + break; + } + } + return Promise.reject(error) +}) + +export default serveice