vue3 引入axios 并封装下
没有考虑取消重复请求、重复发送请求、请求缓存等情况
实现请求拦截
实现响应拦截
常见错误信息处理
请求头设置
api 集中式管理
index.js
import axios from "axios"; import qs from "qs"; const serverConfig = { baseURL: "https://127.0.0.1:8000", // 请求基础地址,可根据环境自定义 useTokenAuthorization: true, // 是否开启 token 认证 } // 创建 axios 请求实例 const serviceAxios = axios.create({ baseURL: serverConfig.baseURL, // 基础请求地址 timeout: 10000, // 请求超时设置 withCredentials: false, // 跨域请求是否需要携带 cookie }); // 创建请求拦截 serviceAxios.interceptors.request.use( (config) => { // 如果开启 token 认证 if (serverConfig.useTokenAuthorization) { config.headers["Authorization"] = localStorage.getItem("token"); // 请求头携带 token } // 设置请求头 if (!config.headers["content-type"]) { // 如果没有设置请求头 if (config.method === 'post') { config.headers["content-type"] = "application/x-www-form-urlencoded"; // post 请求 config.data = qs.stringify(config.data); // 序列化,比如表单数据 } else { config.headers["content-type"] = "application/json"; // 默认类型 } } console.log("请求配置", config); return config; }, (error) => { Promise.reject(error); } ); // 创建响应拦截 serviceAxios.interceptors.response.use( (res) => { let data = res.data; // 处理自己的业务逻辑,比如判断 token 是否过期等等 // 代码块 return data; }, (error) => { let message = ""; if (error && error.response) { switch (error.response.status) { case 302: message = "接口重定向了!"; break; case 400: message = "参数不正确!"; break; case 401: message = "您未登录,或者登录已经超时,请先登录!"; break; case 403: message = "您没有权限操作!"; break; case 404: message = `请求地址出错: ${error.response.config.url}`; break; case 408: message = "请求超时!"; break; case 409: message = "系统已存在相同数据!"; break; case 500: message = "服务器内部错误!"; break; case 501: message = "服务未实现!"; break; case 502: message = "网关错误!"; break; case 503: message = "服务不可用!"; break; case 504: message = "服务暂时无法访问,请稍后再试!"; break; case 505: message = "HTTP 版本不受支持!"; break; default: message = "异常问题,请联系管理员!"; break; } } return Promise.reject(message); } ); export default serviceAxios;
user.js
import serviceAxios from "../index"; export const getUserInfo = (params) => { return serviceAxios({ url: "/api/website/queryMenuWebsite", method: "post", params, }); }; export const login = (data) => { return serviceAxios({ url: "/api/user/login", method: "post", data, }); };
*.vue
使用
async loginAsync() { let params = { email: "123", password: "12321" } let data = await login(params); console.log(data); }
有什么不同见解可以在评论区共同讨论
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!