vue对axios进行请求响应封装

一、原因

        像是在一些业务逻辑上,比如需要在请求之前展示loading效果,或者在登录的时候判断身份信息(token)等信息有没有过期,再者根据服务器响应回来的code码进行相应的提示信息。等等在请求之前,之后做的一些逻辑,都可以通过二次封装axios请求,进行实现。

二、具体的封装

        这里是对axios封装的一种形式,有多种形式,具体要根据具体业务需求去定。具体代码里面有具体注释。不再啰嗦,直接上具体代码吧,供参考!

// axios的封装
import axios, { HttpStatusCode } from "axios";
import { useRouter } from "vue-router";// 生产环境
const baseURLProd = "https://mall.quanrui.cc/api/v1/backend/";
// 测试环境
const baseURLDev = "http://139.9.197.13:8088/api/v1/backend/";
const baseURL = baseURLDev;   //更改baseurl// 使用路由
const router = useRouter();// 设置请求头
axios.defaults.headers.post["Content-Type"] =
"application/x-www-form-urlencoded;charset=UTF-8";// 创建axios示实例
let instance = axios.create({baseURL: baseURL,   //设置baseurltimeout: 5000, //超时时间
});// 跳转到登录页面,如果没有登录,或者登录信息过期的话
// 携带当前页面路由,以期在登录页面完成登录后返回当前页面
const toLogin = () => {router.replace({path: "/login",query: {redirect: router.currentRoute.fullPath,},});
};// 提示信息,Toast这个是第三方组件,根据使用的UI组件库不同进行更换
const tip = msg => {    Toast({        message: msg,        duration: 1000,        forbidClick: true    });
}// 请求拦截器
// (主要是在请求的时候携带请求token,以协助后端进行判断身份信息是否过期等),或者还可以在此增加业务操作,比如请求之前展示loading效果,具体可以拿个第三方UI库的一个效果过来使用
axios.interceptors.request.use(config => {// 每次发送请求之前判断是否存在token,如果存在,则统一在http请求的header都加上token,不用每次请求都手动添加了// 即使本地存在token,也有可能token是过期的,所以在响应拦截器中要对返回状态进行判断const token = store.state.token;token && (config.headers.Authorization = token);return config;},error => {return Promise.error(error);}
);// 响应拦截器(主要对code进行判断,提示用户进行操作)
axios.interceptors.response.use(response => {if (response.status === 200) {return Promise.resolve(response);} else {return Promise.reject(response);}},// 服务器状态码不是200的情况error => {if (error.response.status) {switch (error.response.status) {// 401: 未登录// 未登录则跳转登录页面,并携带当前页面的路径// 在登录成功后返回当前页面,这一步需要在登录页操作。case 401:tip("未登录,请先登录");setTimeout(()=> {toLogin();},1000)break;// 403 token过期// 登录过期对用户进行提示// 清除本地token和清空vuex中token对象// 跳转登录页面case 403:tip("登录过期,请重新登录");// 清除tokenlocalStorage.removeItem("token"); //如果存在了浏览器的localStorage// store.commit("loginSuccess", null);    //如果存在store里的登录状态,获取其它相关信息// 跳转登录页面,并将要浏览的页面fullPath传过去,登录成功后跳转需要访问的页面setTimeout(() => {toLogin();}, 1000);break;// 404请求不存在case 404:tip("网络请求不存在");break;// 其他错误,直接抛出错误提示default:tip(error.response.data.message);break;}return Promise.reject(error.response);}}
);//get方法
export function get(url, params){    return new Promise((resolve, reject) =>{        axios.get(url, {            params: params        })        .then(res => {            resolve(res.data);        })        .catch(err => {            reject(err.data)        })    });
}//post方法
export function post(url, params) {    return new Promise((resolve, reject) => {         axios.post(url, JSON.stringify(params))        .then(res => {            resolve(res.data);        })        .catch(err => {            reject(err.data)        })    });
}// put方法
export function put(url, params){    return new Promise((resolve, reject) =>{        axios.put(url, {            params: params        })        .then(res => {            resolve(res.data);        })        .catch(err => {            reject(err.data)        })    });
}// delete方法
export function del(url, params){    return new Promise((resolve, reject) =>{        axios.delete(url, {            params: params        })        .then(res => {            resolve(res.data);        })        .catch(err => {            reject(err.data)        })    });
}// 导出实例
export default instance;

三、对请求统一管理

        创建一个文件夹用于存放接口的请求,到时候用起来,只需要导出请求的方法就行,统一管理。不然全堆在页面上,一大串代码有点难看!

先从我们封装好的axios里面导出具体的请求方法

以下示例:

四、页面上使用

先导出请求接口的具体方法

import { pwlogin } from "../api/login";

 使用:

getloginres() {pwlogin(data).then((res) => {//数据处理}).catch((err) => console.log(err));}

以上就是全部,错误欢迎提出!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ABAP注释快捷键修改(留着备用)

ABAP注释快捷键修改(留着备用) 在使用ABAP编辑器的时候,原有的添加代码注释和取消代码注释的快捷键未生效,这时我们可以考虑对注释快捷键进行修改 在事务码SE38(ABAP编辑器)屏幕右下角,点击【Options选项】图标 在【键盘】|【命令】输入栏中…

DWM 相关实现代码 [自用]

1. DWM 缩略图和模糊隐藏实现半透明 #include <windows.h> #include <dwmapi.h> #include <string> #pragma comment(lib, "dwmapi.lib")// 检查 UWP 窗口是否可见 bool IsUWPWindowVisible(HWND hwnd) {DWORD cloaked 0;DwmGetWindowAttribute(…

【c语言】玩转文件操作

&#x1f31f;&#x1f31f;作者主页&#xff1a;ephemerals__ &#x1f31f;&#x1f31f;所属专栏&#xff1a;C语言 目录 引言 一、文件的打开和关闭 1.流 2.标准流 3.文本文件和二进制文件 4.控制文件打开与关闭的函数 二、文件的顺序读写 三、文件的随机读写 1…

深入理解OAuth 2.0:原理、流程与实践

一、什么是OAuth 2.0 1. 什么是OAuth 2.0 OAuth 2.0 是一套关于授权的行业标准协议。 OAuth 2.0 允许用户授权第三方应用访问他们在另一个服务提供方上的数据&#xff0c;而无需分享他们的凭据&#xff08;如用户名、密码&#xff09;。 2. OAuth 2.0 应用场景 OAuth 2.0的…

服务器U盘安装Centos 7时提示Warning:/dev/root does not exist

这是没有找到正确的镜像路径导致的&#xff0c;我们可以在命令行输入ls /dev看一下有哪些盘符 像图中红色圈起来的就是我插入U盘的盘符&#xff0c;大家的输几盘可能做了多个逻辑盘&#xff0c;这种情况下就可以先将U盘拔掉再ls /dev看一下和刚才相比少了那两个盘符&#xff0c…

权力之望怎么下载客户端 权力之望一键下载

《权力之望》是一款由NX3 Games开发、Smilegate发行的多人在线动作MMORPG游戏。这款游戏最大的特点是高度的自由度和丰富的角色定制选项。我们在游戏中不仅可以自由更换武器&#xff0c;而且游戏还提供了54种能力和60多种职业选择&#xff0c;让我们可以根据自己的游戏风格和喜…

继 承

为什么要有继承&#xff0c;继承的作用&#xff1f; 继承(inheritance)机制&#xff1a;是面向对象程序设计使代码可以复用的最重要的手段&#xff0c;它允许程序员在保持原有类特性的基础上进行扩展&#xff0c;增加新功能&#xff0c;这样产生新的类&#xff0c;称派生类。 …

【人工智能】—基于成都市各区(市)县租房价格预测建模研究

引言 随着城市化进程的加速&#xff0c;人口流动日益频繁&#xff0c;租房市场作为城市生活的重要组成部分&#xff0c;其价格波动对居民生活质量和城市经济发展具有显著影响。成都市&#xff0c;作为中国西部地区的经济、文化、交通和科技中心&#xff0c;近年来吸引了大量人…

为什么独立站需要高质量的GPB外链?

独立站需要高质量的GPB外链&#xff0c;主要是因为它们能显著提升网站的可信度和可见性。高质量的外链相当于得到其他权威网站的认可和推荐&#xff0c;这会让搜索引擎认为你的内容有价值&#xff0c;从而提升你的搜索排名。试想一下&#xff0c;当其他有影响力的网站愿意链接到…

请求接口在控制台报cors跨域问题

我的问题是&#xff1a;BASE_URL没有和本地IP设置一致 刚开始&#xff1a;&#xff08;这个不是我本地电脑的地址&#xff09; 所以我要把&#xff1a;这个地址改为我本地电脑的ip&#xff08;http://192.168.2.50:8087&#xff09; BASE_URL: http://localhost:8087/api/ 或…

单位电脑文档怎么加密?哪种方法最有效?

单位电脑文档的加密是保障信息安全的重要措施之一&#xff0c;它可以防止未经授权的访问和数据泄露。 选择最佳的加密方法取决于您的具体需求&#xff0c;包括文档的敏感程度、加密的便捷性、成本、以及是否需要跨平台兼容性。下面是几种常见的加密方法及其优缺点&#xff0c;…

昇思学习打卡-8-FCN图像语义分割

目录 FCN介绍FCN所用的技术训练数据的可视化模型训练模型推理FCN的优点和不足优点不足 FCN介绍 FCN主要用于图像分割领域&#xff0c;是一种端到端的分割方法&#xff0c;是深度学习应用在图像语义分割的开山之作。通过进行像素级的预测直接得出与原图大小相等的label map。因…

若依微服务初始化搭建教程

文章目录 &#x1f95d;从Gitee拉取代码&#x1f344;初始化项目配置配置项目maven配置项目JDKmaven - clean - install &#x1f352;数据源配置创建config / seata数据库创建ry-cloud数据源导入ry-cloud数据 &#x1f370;启动Nacos下载Nacos修改Nacos配置双击startup.cmd启动…

GraphRAG:AI的全局文本理解革新

前言 在人工智能领域&#xff0c;处理和理解大量文本数据始终是一个挑战。随着大型语言模型&#xff08;LLMs&#xff09;的出现&#xff0c;自动化地进行复杂的语义理解和文本摘要变得可能。检索增强生成&#xff08;RAG&#xff09;方法因其能有效结合检索与生成技术&#x…

C++基础语法之重载引用和命名空间等

1.C关键字 c的关键字比我们的c语言的关键字多&#xff0c;c包容C语言并对C语言进行了补充&#xff0c;但是我们对关键字的学习是在我们后面逐渐学习的。这里我们的只是提供一个表格对齐了解一下。 2.命名空间 我们c出现了命名空间的概念&#xff0c;用关键字namespace来定义。…

论文阅读 - Intriguing properties of neural networks

Intriguing properties of neural networks 经典论文、对抗样本领域的开山之作 发布时间&#xff1a;2014 论文链接: https://arxiv.org/pdf/1312.6199.pdf 作者&#xff1a;Christian Szegedy, Wojciech Zaremba, Ilya Sutskever, Joan Bruna, Dumitru Erhan, Ian Goodfellow,…

信息技术课堂上如何有效防止学生玩游戏?

防止学生在信息技术课堂上玩游戏需要综合运用教育策略和技术手段。以下是一些有效的措施&#xff0c;可以用来阻止或减少学生在课堂上玩游戏的行为&#xff1a; 1. 明确课堂规则 在课程开始之初&#xff0c;向学生清楚地说明课堂纪律&#xff0c;强调不得在上课时间玩游戏。 制…

电阻负载柜的工作原理是什么?

电阻负载柜是用于模拟电网中各种负载特性的设备&#xff0c;广泛应用于电力系统、新能源发电、电动汽车充电站等领域。其工作原理主要包括以下几个方面&#xff1a; 1. 结构组成&#xff1a;电阻负载柜主要由变压器、调压器、电阻器、控制器、保护装置等部分组成。其中&#xf…

理解神经网络的通道数

理解神经网络的通道数 1. 神经网络的通道数2. 输出的宽度和长度3. 理解神经网络的通道数3.1 都是错误的图片惹的祸3.1.1 没错但是看不懂的图3.1.2 开玩笑的错图3.1.3 给人误解的图 3.2 我或许理解对的通道数3.2.1 动图演示 1. 神经网络的通道数 半路出嫁到算法岗&#xff0c;额…

数据防泄密软件精选|6款好用的数据防泄漏软件强推

某科技公司会议室&#xff0c;CEO张总、CIO李总、信息安全主管王经理正围绕最近发生的一起数据泄露事件展开讨论。 张总&#xff08;忧虑&#xff09;: 大家&#xff0c;这次的数据泄露事件对我们来说是个沉重的打击。客户信息的外泄不仅损害了我们的信誉&#xff0c;还可能面…