axios二次封装

news/2024/10/12 21:52:54

axios二次封装有利于减少代码量,更好的管理api

①在src目录下创建api目录。api目录用于存放今后页面不同模块的接口信息。

 具体的接口含义如下:

②将来要实现的效果如下:

import axiosRequest from "./utils/request/http";
axiosRequest({path: "product",//使用的api模块name: "productInfo",//存储的变量信息params: {name: "jdie",password: "diikde",},
})

通过axiosRequest  来调用请求,同时path参数指定模块。name来制定模块中的接口信息,params表示要传入的参数。

③具体的封装在src/utils/request底下,配置了两个文件config.ts和http.ts

config.ts代码如下:

const config = {baseURL: import.meta.env.VITE_APP_BASE_API, //该参数在.env.development中进行配置,开发、测试、生成均不相同timeout: 15000,headers: {'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8',// 'token' : 11122
    },}export default config;

http.ts代码如下(主要逻辑在动态import引入数据):

import axios from "axios";
import axiosConfig from "./config"; // axios请求配置
import qs from "qs";
import { ElMessage } from "element-plus";// 创建axios实例
const service = axios.create({baseURL: axiosConfig.baseURL,timeout: axiosConfig.timeout,headers: axiosConfig.headers,
});
// 添加请求拦截器
service.interceptors.request.use(function (config) {//  promise动态添加请求头,加完之后再return出config继续请求const headerHandlers = (axiosConfig.headerHandlers || []).map((handler) => {return handler(config).then((mixHeaders) =>Object.assign(config.headers || {}, mixHeaders));});return Promise.all(headerHandlers).then(() => config);},function (error) {// 对请求错误做些什么return Promise.reject(error);}
);// 添加响应拦截器
service.interceptors.response.use(function (response) {// 对响应数据做点什么return response.data;},function (error) {// 对响应错误做点什么
        ElMessage.error(error.message);return Promise.reject(error);}
);
// 创建请求
const USE_DATA_METHODS = ["POST", "PUT", "PATCH", "DELETE"];
const createRequest = (requestInfo) => {const { path, name, params } = requestInfo; //解构数据// console.log(path, name, params);const path_prefix = "../../api/";//接口文件夹
    let api;import(`${path_prefix}${path}`)//动态载入资源.then((res) => {//res为import的变量名api = res[name];//从资源中取出要发送axios的接口信息// console.log(api)const method = api.method || "POST";const requestParams = USE_DATA_METHODS.includes(method)? { data: qs.stringify(params) }: { params: params };const config = {url: api.path,method,headers: {...api.headers,},...requestParams,};//如果请求的不是默认的域名,就修改域名if (api.baseURL) {config.baseURL = api.baseURL;}// console.log(config);return service(config);}).catch((err) => {ElMessage.error('发送请求失败');console.log(err);});
};
const axiosRequest = createRequest;
export default axiosRequest;

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/70829.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

IDEA中git提交前如何关闭code analysis以及开启格式化代码

前言 我们在使用IDEA开发时,经常是和GIT一起来使用的,可以说,IDEA和GIT结合的非常好,是深度绑定的,使用起来非常方便。 今天,介绍一下IDEA在提交代码前的一些设置。 我们是不是经常遇到一个问题,那就是我们在执行commit和push的时候,IDEA默认会执行代码检查,这是保证我…

idea-java序列化serialversionUID自动生成

简介 java.io.Serializable 是 Java 中的一个标记接口(marker interface),它没有任何方法或字段。当一个类实现了 Serializable 接口,那么这个类的对象就可以被序列化和反序列化。序列化是将对象的状态转换为字节流的过程,这样可以方便地将对象存储到文件中或者通过网络传…

高级语言程序设计课程第三次个人作业

姓名:林永庆 学号:102400121 班级:https://edu.cnblogs.com/campus/fzu/2024C 作业:https://edu.cnblogs.com/campus/fzu/2024C/homework/13284 4.8 2 记得是\n3 指数是%e4 数组保存名字6 %d 可以动态指定长度7 FLT_DIG是%d形式的8 注意type5.11 1 局部变量和全局变量的区别…

记一次docker overlay2目录空间占用过高问题

背景 最近需要频繁本地构建镜像以及调试 POD,导致磁盘空间告警 分析 查看当前磁盘使用情况# df -h发现这个目录下占用了不少空间 docker 常见的造成磁盘告警的原因有,知道原因之后就可以开始清理工作了/var/lib/docker/containers # 容器 /var/lib/docker/volumes # 数据卷…

IP数据报

IP数据报的格式 一个IP分组(或称IP数据报)由首部和数据部分组成。首部前一部分的长度固定,共20B,是所有IP分组必须具有的。在首部固定部分的后面是一些可选字段,其长度可变,用来提供错误检测及安全等机制。IP数据报的格式如图4.5所示。版本。占4位。指IP的版本,IPv4数据报中…

辐射换热

热力学u能-电磁波能-热力学能 辐射角度不同强度不同 温度不同,波长不同波长*频率=3*10,8真空中光的传播速度 可见光波长0.38紫色--0.76红色热辐射又称为红外辐射吸收率+反射率+穿透率=1深处黑房间光进去基本出来少看着黑开尔文温度实际物体辐射力小于黑体凹x有,凸x1-1为0

连通性问题大杂烩

前言 连通性问题确实时一大比较难啃得蛋糕,每次都要先学习一遍,还不如一次学到通 无向图的连通性问题 求割点 连通图:连通图内的所有点都可以互相到达 割点:将割点删掉后整张图不连通 定理1: 一个点s是割点,当且仅当s作为该连通图的根时,会把连通图分为不相连的几部分 定…

15-网络安全主动防御技术与应用

15.1 入侵阻断技术与应用 入侵阻断是网络安全主动防御的技术方法,其基本原理是通过对目标对象的网络攻击行为进行阻断,从而达到保护目标对象的目的。 1)原理 防火墙、IDS是保障网络安全不可缺少的基础技术,但是防火墙和IDS 本身存在技术上的缺陷。防火墙是基于静态的粗粒度…