vue3中 axios 发送请求 刷新token 封装axios

news/2024/12/3 3:24:22/

service.js 页面

javascript">import axios from 'axios'
// 创建axios实例
const instance = axios.create({baseURL: 'http://gcm-test.jhzhkj.cn:8600/h5card/',timeout: 5000, // 请求超时时间headers: {get: {'Content-Type': 'application/x-www-form-urlencoded'},post: {'Content-Type': 'application/json',}}
});// 请求拦截器
instance.interceptors.request.use(config => {// 可以在这里添加请求头等信息// config.headers['accesstoken'] = localStorage.getItem('accesstoken');const token = localStorage.getItem('accesstoken');const userId = 'clientId_pj9A9xEt8Y2YaEyQ9eEx';if (token) {config.headers.accesstoken = `${token}`;config.headers.userId = `${userId}`;}return config;},error => {// 请求错误处理console.log('请求错误处理',error); // for debugreturn Promise.reject(error);}
);// 响应拦截器
instance.interceptors.response.use(response => {//  if ( response.msg == '登录已失效,请退出重新登录!') {//  console.log('失败失败',response)// }const res = response.data;// 如果返回的状态码为200,说明成功,可以直接返回数据if (res.code === 200) {return res;} else {console.log(res,'响应拦截器 接口返回的错误数据')if(res.code == 500){alert('请稍后再试')}// 其他状态码都当作错误处理// 可以在这里对不同的错误码进行不同处理return Promise.reject({message: res.msg || 'Error',status: res.code});}},async error => {// ‌originalRequest._retry‌ 在axios中表示一个布尔值,用于控制请求的重试机制。当_retry设置为true时,表示当前请求将被重试。const originalRequest = error.config;// token过期 重新刷新Tokenif (error.response.data.code === 401 && !originalRequest._retry) {originalRequest._retry = true;try{let paramsData = {clientId: "c2YaEyEx", //IDclientSecret: "bb92aN9w", //秘钥};const res = await instance.post('/client/getToken', paramsData);const accesstoken = res.data.accesstoken;localStorage.setItem('accesstoken', accesstoken);instance.defaults.headers.common['accesstoken'] = `${accesstoken}`;return instance(originalRequest);}catch(refreshError){return Promise.reject(refreshError);}}// 对响应错误做处理// console.log('对响应错误做处理err' + error); // for debugreturn Promise.reject(error);}
);export const httpPost = (url, data = {}) => {return new Promise((resolve, reject) => {instance({url,data,method: 'post'}).then((response) => {if (response && response.code === 200) {resolve(response)} else {alert(response.msg)reject(response && response.msg)}})})
}export const httpGet = (url, params = {}) => {return new Promise((resolve, reject) => {instance({url,params,method: 'get'}).then((response) => {if (response && response.code === 200) {resolve(response.data)} else {alert(response.msg)reject(response && response.msg)}})})
}

api/common.js页面

javascript">import { httpPost,httpGet } from '@/utils/service';
// 获取token
export function getToken(params) {return httpPost('/client/getToken',params);
}

vue文件里应用

javascript">import { getToken } from "@/api/common";const getHome = () => {let paramsData = {clientId: "8Y9eEx",  };getToken(paramsData).then((res) => {if (res.code == 200) {if (res && res.data.accesstoken) {localStorage.setItem("accesstoken", res.data.accesstoken);}}});
};

http://www.ppmy.cn/news/1551905.html

相关文章

根据后台数据结构,构建搜索目录树

效果图: 数据源 const data [{"categoryidf": "761525000288210944","categoryids": "766314364226637824","menunamef": "经济运行","menunames": "经济运行总览","tempn…

[Go] slice切片详解

切片详解 切片的实现 Go 中的切片本质上是一个结构体,包含以下三个部分: 指向底层数组的指针(array):切片指向一个底层数组,数组中存储着切片的数据。切片的长度(len)&#xff1a…

通信原理实验:PCM编译码

目录 一、实验目的和要求 二、实验内容和原理 实验器材 实验原理 实验原理框图 实验框图说明 三、实验步骤 实验项目二 PCM 编码规则验证 四、实验记录与处理(数据、图表、计算等) 五、实验结果及分析 一、实验目的和要求 掌握脉冲编码调制与解调的原理。掌握脉冲编…

百度 文心一言 vs 阿里 通义千问 哪个好?

背景介绍: 在当前的人工智能领域,随着大模型技术的快速发展,市场上涌现出了众多的大规模语言模型。然而,由于缺乏统一且权威的评估标准,很多关于这些模型能力的文章往往基于主观测试或自行设定的排行榜来评价模型性能…

手机卡限速丨中国移动5G变3G,网速500kb

以下猜测错误,又有新的猜测:河南移动的卡出省限速。可能是因为流量结算。 “2024年7月1日起,中国移动集团内部将开启跨省流量结算” 在深圳四五年了,之前没有过,就从上个月开始。 中国移动会自动把近期使用流量较少…

安装SQL Server 2022提示需要Microsoft .NET Framework 4.7.2 或更高版本

安装SQL Server 2022提示需要Microsoft .NET Framework 4.7.2 或更高版本。 原因是:当前操作系统版本为Windows Server 2016 Standard版本,其自带的Microsoft .NET Framework 版本为4.6太低,不满足要求。 根据报错的提示,点击链接…

el-selet下拉菜单自定义内容,下拉内容样式类似表格

<el-form-item label"角色:" prop"username"><el-selectv-model"value"placeholder"Select"popper-class"role_select"><el-option disabled><div class"flex"><div style"width…

40分钟学 Go 语言高并发:pprof性能分析工具详解

pprof性能分析工具详解 一、知识要点概述 分析类型主要功能使用场景重要程度CPU分析分析CPU使用情况和热点函数性能优化、CPU密集型任务分析⭐⭐⭐⭐⭐内存分析分析内存分配和泄漏问题内存优化、泄漏排查⭐⭐⭐⭐⭐协程分析分析goroutine的创建和阻塞并发问题排查、死锁分析⭐…