首页 > 其他分享 >二次封装Axios完全体

二次封装Axios完全体

时间:2023-06-13 21:33:29浏览次数:41  
标签:errMessage requestKey Axios 封装 二次 error const config response

import axios, { Axios } from "axios"; import type { AxiosRequestConfig } from "axios"; import { message } from "antd";
// 功能失败的错误原因 const authErrMessage: any = {   10031: "登录失效,需要重新登录",   10032: "您太久没登录,请重新登录~",   10033: "账户未绑定角色,请联系管理员绑定角色",   10034: "该用户未注册,请联系管理员注册用户",   10035: "code 无法获取对应第三方平台用户",   10036: "该账户未关联员工,请联系管理员做关联",   10037: "账号已无效",   10038: "账号未找到", }; // 请求失败的错误原因 export const networkErrMessage: any = {   400: "错误的请求",   401: "未授权,请重新登录",   403: "拒绝访问",   404: "未找到该资源",   405: "请求方法未允许",   408: "请求超时",   500: "服务器端出错",   502: "网络错误",   503: "服务不可用",   504: "网络超时",   505: "http版本不支持该请求", }; //所有请求列表容器 const requestListMap=new Map();
//根据请求生成唯一的key值
function getRequestKey(config:AxiosRequestConfig){   const {url,method,params={},data={}}=config;   return [url,method,JSON.stringify(params),JSON.stringify(data)].join('&'); };



//添加key function addRequestKey(config:AxiosRequestConfig){   const requestKey=getRequestKey(config);   config.cancelToken=new axios.CancelToken((cancel)=>{     if(!requestListMap.has(requestKey)){       requestListMap.set(requestKey,{         cancel,         pathname:window.location.pathname,       })     }   }) };
//删除请求key function  removeRequestKey(config:AxiosRequestConfig){   const requestKey=getRequestKey(config);   if(requestListMap.has(requestKey)){     const {cancel}=requestListMap.get(requestKey);     cancel();     requestListMap.delete(requestKey);   } };
const requesttest=axios.create({   baseURL:process.env.REACT_APP_API,   headers:{},   timeout:20000 }); requesttest.interceptors.request.use(   (config)=>{     const token=localStorage.getItem('token');         if(token){           config.headers.token=token;         };         removeRequestKey(config);         addRequestKey(config);         return config   } );
requesttest.interceptors.response.use(   (response)=>{     removeRequestKey(response.config);     const code=response.data.code;     if(code===20000){       return response.data.data;     }else{       let errMessage=authErrMessage[code];       if(errMessage){         //功能出错,需要特殊处理,例如退出登录等       }else{         errMessage=response.data.message;       };       message.error(errMessage);       return Promise.reject(errMessage);     }   },   (error)=>{     error.config&&removeRequestKey(error.config);     let errMessage='未知错误,请练习管理员解决';     if(error.response){       //error.response有值,说明服务器有响应,响应结果是错误的,要根据状态码error.response.status来提示错误       errMessage=networkErrMessage[error.response.status];     }else{       //error.response没有值,说明服务器没有响应,请求在客户端就失败了        if(error.message.indexOf('timeout')>-1){         //请求超时         errMessage='当前网络环境不稳定,请换网试试';        }else if(error.message.indexOf('Network')>-1){         //断网了         errMessage='没有检测到网络,请打开网络连接试试';        }else if(error.message.indexOf('canceled')>-1){         errMessage='请求被取消了'        }     };     message.error(errMessage);     return Promise.reject(errMessage);   } );
export default requesttest

标签:errMessage,requestKey,Axios,封装,二次,error,const,config,response
From: https://www.cnblogs.com/luckily7/p/17478764.html

相关文章

  • 计时器封装
     心血来潮写个计时器玩一下在开发的过程中难免会遇到需要大量的计时器,有一个好的计时器对开发或者程序的运行效率都有很大的提升作为一个合格的程序员,我们不可能每次有计时都在update去做一个计时或者新开一个协程去计时,太麻烦辣,效率太慢辣,性能还差所以赶紧封装器来... 这......
  • Ease缓动函数封装
     什么是Ease缓动函数:Ease缓动函数是一种常见的动画效果函数,使用Ease缓动函数可以让动画效果看起来更加真实,时而加速时而减速,让动画不至于看上去太过“平凡”具体的缓动效果可以参考https://www.xuanfengge.com/easeing/easeing/算是比较简单的一个功能,就不墨迹了usingUn......
  • uni-app请求封装
    1.http.js//你的请求地址(线上或线下)exportconstBASE_URL='http://xxx.xxx.xx.xxx:xxxx/'; exportconsthttp=(options)=>{returnnewPromise((resolve,reject)=>{lettoken="",tokenName='';letheader={......
  • java ImageIO处理图像的封装
    评:packagecom.adam.dev.pic.easyImage;importjava.awt.AlphaComposite;importjava.awt.Color;importjava.awt.Font;importjava.awt.Graphics;importjava.awt.Graphics2D;importjava.awt.Point;importjava.awt.Rectangle;importjava.awt.co......
  • UG二次开发NXOpen-Python(十三)内螺纹滚道干涉磨砂轮截形计算
    滚珠螺母内螺纹滚道在加工时,砂轮接杆偏摆角度为滚道螺旋升角,砂轮截形为滚道法向截形。当螺母导程较大时,比如说1616、2020等规格,螺旋升角较大,若按螺旋升角的大小调整砂轮接杆角度,则砂轮接杆会和螺母内孔产生干涉,此时就需要采用其它加工方法,比如说“以车代磨”、“软轴磨”、“......
  • vue中使用axios获取不到响应头Content-Disposition的解决办法
    项目中,后端返回的文件流,fileName是机构名称+服务器时间。前端需要拿到响应头里的Content-Disposition字段的值,从中获取文件名在控制台Headers中可以看到相关的字段和文件名,但是在axios里面却获取不到 如果想要让客户端访问到相关信息,服务器不仅要在heade里添加,还要将它们在A......
  • axios-使用axios发起基本的GET请求
    axios是一个专注于网络请求的库!<!DOCTYPEhtml><html> <head> <metacharset="utf-8"> <title></title> </head> <body> <scriptsrc="lib/axios.js"></script> <script> //1.调......
  • 83 封装 在类中设定私有属性 限定传入的参数的范围;当调用时,需要用set方法传参
    类 封装packagecom.fqs.demo061201;publicclassGirl{//属性Stringname;privateintage;//set赋值publicvoidsetAge(inta){if(age>18&&age<50){age=a;}else{System.out.println......
  • 二次元ai绘画软件推荐,亲测草图都那么好看
    使用软件:触站AI使用模型:触站AI二次元模型作品类型:草图(可选择继续细化)使用二次元AI绘画软件,不仅可以快速生成各种风格的2D画作,而且每次生成的画作都会有惊喜。通过改变输入描述词和模型选择,不断地生成各种各样的画作,让人们的创意无限发掘,想象力得以释放。不仅如此,还可以通过调整画作......
  • Axios 代理跨域后后端无法接收Session问题
    将一个MVC项目重构为一个前后端分离项目,前端使用了react+axios+vite...。在前后端分离项目中,通常都会使用代理来解决跨域问题,vite需要在vite.config.js文件中配置代理:exportdefaultdefineConfig({server:{//代理配置proxy:{//请求前缀......