axios请求封装

2023-05-16

一、简单封装

  1. 封装get请求

function ajax_get(url,params={}){
    return new Promise(resolve => {
        axios.get(url,{
            params
        }).then(r=>{
            console.log(r.data);
            resolve(r.data)
        })
    })
}

var getBanner = () => ajax_get(baseUrl + "/banner")

var getGoodList = data => ajax_get(baseUrl + "/goodList",data)

2.封装post请求

function ajax_post(url,params={}){
    return new Promise(resolve => {
        axios.post(url,params).then(r=>{
            resolve(r.data)
        })
    })
}

将需封装好的请求export导出

export {
    getBanner,
    getGoodList
}

二、高级封装

1.配置axios

// http.js 这个文件是对axios请求插件的二次封装, 有的请求需要携带token,、可以把token携带的操作放在请求拦截的函数,也就是在发请求时候,先经过请求拦截追加token发给服务器,也可以对服务器响应进行进行优化再返回给客户端 可以设置请求的服务器地址,也可以设置超时时间等。
import axios from "axios"; // 导入原始的请求插件

// 有些post接口无法解析对象类型的请求参数, 可以使用qs模块(node内置模块)把对象类型的数据序列化为查询字符串结构 {name:lisi, age:10} ===> ?name=lisi&age=10
import qs from "qs"

// 请求数据时,展示请求的加载框, 使用element-plus组件库的加载组件
import { ElLoading } from 'element-plus'
let loading = null;


// 功能1 根据环境设置axios发起不同的服务器请求地址, 设置后,发起ajax请求不再拼接基础路径
if(process.env.NODE_ENV == "development"){
    axios.defaults.baseURL = "/cige"  // 开发环境的代理路径
}else if(process.env.NODE_ENV == "production"){
    axios.defaults.baseURL = "https://lianghj.top:8888/api/private/v1"  // 生产环境的原始路径 (项目打包时用这个路径)
}

//功能2 添加超时功能 设置超时时间, 请求超过30秒无响应就判定请求失败
axios.defaults.timeout = 30000 //30s

// 功能3 是否允许跨域请求携带Cookie, 前端设置了该属性为true时,后端需要设置Access-Control-Allow-Origin为前端项目的源地址,不可设置为*;
axios.defaults.withCredentials = true 

// 功能4 在请求头设置(post)请求内容的编码格式
axios.defaults.headers["Content-Type"]="application/x-www-form-urlencoded"

// 功能5 把请求的参数由对象结构转化为查询字符串结构,  转换通过qs第三方进行转换  data就是请求参数
axios.defaults.transformRequest = data =>qs.stringify(data)

// 功能6 axios请求拦截 在发请求之前 对请求进行处理 一般把本地token添加到请求头里面执行登录认证, 这样在发请求时就不用考虑并处理token了
axios.interceptors.request.use(request=>{
    // 请求时开始加载, target参数指定加载框显示的区域
    if(!loading) loading = ElLoading.service({target:".refresh_box"})  
    // console.log("axios请求拦截",request); // config参数是请求的配置信息
    let token = sessionStorage.getItem("token") //从本地取出token
    // 登录授权 请求验证是否有token  需要授权的 API ,必须在请求头中使用 `Authorization` 字段提供 `token` 令牌(具体字段由服务器后台定义)
    token && (request.headers.Authorization=token)
    return request
},error=>{
    return Promise.reject(error) // 返回错误
})

// 功能7 axios的响应拦截, 可在这里对响应数据或响应头做处理
axios.interceptors.response.use(response=>{
    if(loading) {      // 响应时结束加载
        loading.close();  
        loading = null;
    }
    // axios响应数据会封装到一层data字段中, 把data字段剥开,返回原始响应
    return response.data 
},error=>{
    return Promise.reject(error)
})

// 功能8 显示请求时的加载框, 见请求拦截和响应拦截

// 最后,返回配置之后的axios
export default axios
  1. 封装请求

// 导入我二次封装的请求插件
import http from "./http"

// 登录
const postLogin = params => http.post('/login', params);

// 左侧菜单列表
const getMenus = () => http.get("/menus");

// 获取用户列表
const getUsers = params => http.get("/users", { params });

// 修改用户状态
const putUserState = params => http.put(`/users/${params.uId}/state/${params.type}`);

// 添加用户
const postAddUser = params => http.post("/users", params);

// 编辑用户信息
const putUserInfo = params => http.put(`/users/${params.id}`, params);

// 删除单个用户
const deleteUser = params => http.delete(`/users/${params.id}`);

// 分配用户角色
const putUserRole = params => http.put(`/users/${params.uid}/role`,params);

// 获取角色列表
const getRoles = () => http.get("/roles");

// 添加角色
const postAddRole = params => http.post('/roles', params);

// 编辑角色信息
const putRolesInfo = params => http.put(`/roles/${params.id}`, params);

// 删除角色
const deleteRoles = params => http.delete(`/roles/${params.id}`);

// 所有权限列表
const getRights = params => http.get(`/rights/${params.type}`);

// 删除角色指定权限
const deleteRightForRole = params => http.delete(`/roles/${params.roleId}/rights/${params.rightId}`);


// 图片上传地址
const uploadUrl = http.defaults.baseURL + "/upload";

// 图片上传 
const postImg = formData => http({
    url: "/upload",
    method: "post",
    headers: { 
        // 文件上传的请求头需要设置数据类型multipart/form-data
        "Content-Type" : "multipart/form-data"
    },
    // 注意: 请求体中使文件数据, 不是对象, 不需要(qs)处理请求体
    transformRequest: data => data,
    data: formData  // 文件数据要放到formData对象中
})

export{
    .....
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

axios请求封装 的相关文章

随机推荐

  • jQuery 获取与设置 元素属性【一篇文章轻松拿下】

    hello大家好呀 xff01 此篇文章带领大家熟练掌握 jQuery 的属性方面的操作 xff0c 包括固有属性的获取与设置 xff0c 自定义属性的获取与设置等等 xff0c 走进 jQuery 的更深层次阶段 文章目录 xff1a 一
  • can的总结——笑笑

    一 什么是can can就是车用主线 xff0c 贯穿整个车的存在 can的分类2 默认是高速can 低速容错can 单线can 用两种can会减少can网络语言的负载率 xff0c 就是原本一个小屋做核酸 xff0c 现在是两个速度翻倍
  • VDO虚拟数据优化

    1 xff0c VDO xff08 Virtual Data Optimize xff09 虚拟数据优化 2 xff0c 使用VDO压缩存储设备上的数据并进行重复删除 xff0c 以此来优化存储空间的使用 3 xff0c 描述虚拟数据优化器
  • 无人机组装调试步骤(保姆级别教程)

    门店 xff1a YH远航科技模型 xff08 Pixhawk飞控 xff09 新动模型 xff08 电机 xff0c 电调 xff09 相应的电机 xff0c 电调 xff0c 机臂的连接 https m tb cn h UcqJUyV
  • redis无法连接

    配置 错误信息 xff1a 2022 06 15 11 43 52 INFO com atguigu srb core RedisTemplateTests Started RedisTemplateTests in 16 781 seco
  • 关于路径规划问题的详细总结(千字长文)

    1 路径规划和轨迹优化的方法概括 1 1 1 路径规划的方法概括 1 1 2 轨迹优化的方法概括
  • Java后端开发功能模块思路

    文章目录 前言一 查找接口及参数信息1 1 找访问路径1 2 参数及返回结果信息1 3 编写功能模块函数 二 代码设计思路三 总结 前言 对于正在学习Java后端开发的同学来说 xff0c 对于Java后端功能模块的开发过程及思路要有一个整
  • 《Linux内核设计与实现》

    文章目录 前言第1章 xff1a Linux内核简介第3章 xff1a 进程管理进程进程描述符及任务结构分配进程描述符进程描述符的存放进程状态设置当前进程的状态进程上下文切换进程家族树 进程创建写时拷贝fork 线程在linux中的实现创建
  • 基于51单片机的FRID智能门禁系统(RFID,12864,AT24C02,步进电机......)

    目录 门禁系统 需要的器件 设计思路 流程图实现 技术实现 实物接线图 实物接线图 函数设计 部分主程序代码 截取片段 12864显示模块 步进电机模块以及蜂鸣器 FRID射频模块 AT24C02模块 功能实现及其源代码 完整文件 门禁系统
  • Linux命令大全

    Linux 命令大全 Linux 命令大全 1 文件管理 cat chattr chgrp chmod chown cksum cmp diff diffstat file find git gitview indent cut ln le
  • STM32与ST-Link杜邦线连接

    上面的开发板的引脚含义如下图 ST Link的引脚含义在表面就有标注 然后只要将名字相同的引脚用杜邦线连接起来就可以了 xff08 我用的是4根杜邦线就够 xff09 需要注意的是 xff1a 有可能电脑的某个USB接口不可以使用 xff0
  • float a=1.0f 中的“f”代表什么

    一个数字 xff0c 是有默认类型的 xff1a 对于整数 xff0c 默认是 int 类型 xff1b 对于小数 xff0c 默认是 double 类型 如果不想让数字使用默认的类型 xff0c 那么可以给数字加上后缀 xff0c 手动指
  • 前端面试自我检测题目查缺补漏

    git bisect是利用二分法的思想 xff0c 来查找哪一次代码提交引入了错误 git stash 暂存 git rebase 合并 git fetch clone 远程端下载至本地 JavaScript 中的 valueOf 方法用于
  • 《计算机网络(计算机)》

    因特网由两大块组成 xff1a 网络边缘由所有连接在因特网上的主机组成 xff1b 而 xff08 xff09 由大量网络和连接这些网络的路由器构成 主机的IP地址是108 5 18 20 xff0c 使用默认子网掩码 它发送一个直接广播分
  • 《战略人力资源管理》

    西南航空公司的人力资源战略是如何与公司经营战略很好地结合在一起并成功获取市场竞争优势的 xff1f 如何理解战略人力资源规划的五个维度 xff1f 如何理解人力资源管理扮演的 战略伙伴角色 xff1f 什么是战略人力资源管理 xff1f 在
  • 《自动控制原理》

    7图1 5是烤面包机的原理图 面包的烘烤质量烤箱内的温度决及烘烤时间决定 xff08 1 xff09 试说明传动带速度自动控制的工作原理 xff0c 并绘制相应的原理方框图 xff08 2 xff09 绘制烤面包机的方框图 6水位控制系统如
  • 【三】静默压测-windows10本地

    文章目录 一 自动化压测流程图 xff1a 二 静默压测 xff1a 2 1 静默压测介绍 xff1a 2 2 静默压测执行顺序 xff1a 2 2 1 生成 jtl文件 xff1a 2 2 3 Web压测报告生成 xff1a 一 自动化压
  • Java枚举详解

    目录 Java枚举详解 基本介绍 1 自定义类实现枚举 2 使用enum关键字实现枚举 使用enum关键字实现枚举的注意事项 enum的常用方法 enum的使用细节 Java枚举详解 基本介绍 枚举对应英文 enumeration 简写 e
  • 心怀美好,每天多一点微笑

    时光总是匆匆 xff0c 一年又到了尽头 xff0c 十一月底了 xff0c 还有一个月一年又过去了 我们回首过往 xff0c 有收获也要遗憾 在接下来的一个月 xff0c 心怀美好 xff0c 每天多一点微笑 xff0c 闲暇时 xff0
  • axios请求封装

    一 简单封装 封装get请求 function ajax get url params 61 return new Promise resolve 61 gt axios get url params then r 61 gt consol