import axios from "axios" import cache from "./cache" import { ElMessage } from "element-plus" import router from "@/router" // 创建axios实例 const service = axios.create({ baseURL: import.meta.env.VITE_APP_BASE_API, // 从环境变量获取基础URL timeout: 10000 // 请求超时时间 }) //白名单 const excludePath = new Set(["/login"]) // 请求拦截器 service.interceptors.request.use( (config) => { const token = cache.getItem("token") if (!excludePath.has(config.url) && token && config.headers) { config.headers.Authorization = `Bearer ${token}` } return config }, (error) => { // 对请求错误做些什么 return Promise.reject(error) } ) // 响应拦截器 service.interceptors.response.use( (response) => { const res = response.data // 根据业务状态码处理 if (res.code !== 200) { ElMessage({ message: res.message || "Error", type: "error", duration: 5 * 1000 }) // 特殊状态码处理 if (res.code === 401 || res.code === 403) { // 若token过期,或者token无效,或者未找到token,对页面中需要认证的接口都有效,使得重新登录 import("@/store/authentication/index").then(({ useLoginStore }) => { useLoginStore().token = "" }) cache.removeItem("token") router.push("/login") } return res // return Promise.reject(new Error(res.message || "Error")) } else { return res } }, (error) => { if (error.status == 401 || error.status == 403) { cache.removeItem("token") import("@/store/authentication/index").then(({ useLoginStore }) => { useLoginStore().token = "" }) router.push("/login") } ElMessage({ message: error.message, type: "error", duration: 5 * 1000 }) return Promise.reject(error) } ) export default service