首页 > 其他分享 >axios二次封装

axios二次封装

时间:2024-10-12 21:45:16浏览次数:1  
标签:axios 封装 二次 api import const path config

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;

 

标签:axios,封装,二次,api,import,const,path,config
From: https://www.cnblogs.com/yansunda/p/18461544

相关文章

  • 圈子社交系统源码PHP前后端开源二次可扩展
    一、开源概述开源的圈子系统源码允许开发者自由下载、使用和修改,这有助于降低开发成本,提高开发效率,并促进技术的交流和共享。许多开源项目都提供了详细的文档和教程,以帮助开发者更好地理解和使用源码。二、具体实例基于Vue.js和uni-app的圈子系统技术栈:前端采用Vue.js和un......
  • CSP-J 2023 T3 一元二次方程 解题报告
    CSP-J2023T3一元二次方程解题报告Link前言今年\(CSP\)的原题,回家\(1h\)内写\(AC\),但是考场上没有写出来,原因是脑子太不好了,竟然调了两个小时没有调出来.一等奖悬那......正题看完题目,第一眼就是大模拟,并且\(CCF\)绝对不会让你好受,所以出了一个如此***钻的......
  • 静态库封装之ComStr类
    ComStr.h#pragmaonce#include<string>#include<vector>usingnamespacestd;classComStr{public: //CString //============================================================================================================= /* func:CS......
  • 盘点免费且靠谱的AI大模型 API,统一封装,任性调用!
    ​现在做大模型,还有靠谱且免费的API接口吗?靠谱的不免费,免费的不靠谱,鱼和熊掌不可兼得?非也!对于简单的指令而言,绝大部分免费的LLMAPI还是能打的,本文就给大家介绍几款,猴哥亲测好用的免费的API接口!免费LLMAPI汇总(持续更新中)大模型免费版本免费限制备注API讯......
  • 一款Java CMS 网站管理系统,基于RuoYi-fast二次开发,网站后台采用SpringBoot + MyBati
    一款JavaCMS网站管理系统基于RuoYi-fast二次开发,网站后台采用SpringBoot+MyBatis文章目录前言一、开源地址二、环境要求三、功能亮点3.1扩展功能3.2内置功能四、安装方法4.1、拉取源码4.2、修改数据库链接配置4.3、创建数据库并导入数据4.4、配置资源上传......
  • httpCLient请求工具类封装
    1、okhttp工具类依赖:<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><depe......
  • Vue3 封装不定高虚拟列表 hooks
    //useVirtualList.tsimport{ref,onMounted,onBeforeUnmount,watch,nextTick}from"vue";importtype{Ref}from"vue";interfaceConfig{data:Ref<any[]>;//数据源scrollContainer:string;//滚动容器的元素选择器actualHeightC......
  • 基于Vue3+pinia+vue-router+axios+element-plus等开发的新闻发布管理系统
    新闻发布管理系统是一个基于Vue3+pinia+vue-router+axios+element-plus等开发的系统,主要功能包括:登录模块、注册模块、新闻分类管理模块、新闻管理模块、个人中心模块(包括基本资料、更换头像、重置密码功能)等。代码下载:源码下载基于Vue3开发的新闻发布管理系统,使用的前端......
  • 组合数与自动取模类(已封装)
    usingi64=longlong;template<classT>constexprTpower(Ta,i64b){Tres=1;for(;b;b/=2,a*=a){if(b%2){res*=a;}}returnres;}constexpri64mul(i64a,i64b,i64p){i64re......
  • 7天毕设速成9小程序接口封装及对接
    1.接口封装1.1.请求接口封装新建文件夹request,新建index.js,封装接口接口调用对应此系列,springboot后端搭建笔记https://blog.csdn.net/PoofeeDong/article/details/140695913代码如下:constcommoneUrl="http://locahost:9999";//对应前面接口//get请求封装functi......