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

service.js 页面

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页面

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

vue文件里应用

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.mzph.cn/pingmian/63022.shtml

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

相关文章

对于Oracle来说,土地管理是非核心域吗

思雨喵 2022-1-4 14:13 您在课上说,对于土地管理系统来说oracle,arcgis,java是非核心域,因为它们可有可无。我想请教对于oracle来说,土地管理好像也是可有可无,那么土地管理是非核心域吗 UMLChina潘加宇 …

一次Kafka启动失败引出的问题

背景 Some time,有个现场童鞋说咱的Kafka实例有个broker一直crash,还截图给我看了,大致是Kafka启动加载topic分区日志文件的时候,然后就没了,连个WARN都没有。当然,光看这个截图咱啥都不知道,因…

工业齐套管理虚拟现实仿真模拟软件

工业齐套管理虚拟现实仿真模拟软件是与法国最大的汽车制造商合作开发的一款虚拟现实仿真模拟软件,借助身临其境的虚拟现实环境,无需停止生产线,即可模拟仓库和提货区域。 工业齐套管理虚拟现实仿真模拟软件不仅适用于汽车工业,安全…

状态模式的理解和实践

在软件开发中,我们经常遇到需要根据对象的不同状态执行不同行为的情况。如果直接将这些状态判断和行为逻辑写在同一个类中,会导致该类变得臃肿且难以维护。为了解决这个问题,状态模式(State Pattern)应运而生。状态模式…

【MySQL — 数据库基础】MySQL的安装与配置 & 数据库简单介绍

数据库基础 本节目标 掌握关系型数据库,数据库的作用掌握在Windows和Linux系统下安装MySQL数据库了解客户端工具的基本使用和SQL分类了解MySQL架构和存储引擎 1. 数据库的安装与配置 1.1 确认MYSQL版本 处理无法在 cmd 中使用 mysql 命令的情况&a…

图学习GNN笔记

目录 第一部分:预测分析中的图学习4.3 案例研究:图上的学习机器学习生命周期 第二部分:图特征学习特征表示与嵌入为什么难以学习? 第三部分:节点嵌入嵌入节点设置学习节点嵌入浅层编码如何定义节点相似性? …

Python从入门到入狱

Python是从入门到入狱?这个充满调侃意味的说法在程序员圈子里流传甚广。表面看,它似乎是在嘲笑这门语言从简单易学到深陷麻烦的巨大反差,实际上却隐藏着很多值得深思的问题。要解读这个话题,得从Python的特点、使用场景以及潜在风…

Linux获取文件属性

目录 stat函数 获取文件属性 获取文件权限 实现“head -n 文件名”命令的功能 编程实现“ls -l 文件名”功能 stat/fstat/lstat的区别? stat函数 int stat(const char *path, struct stat *buf); 功能:获取文件属性 参数: path&…

线程信号量 Linux环境 C语言实现

既可以解决多个同类共享资源的互斥问题&#xff0c;也可以解决简易的同步问题 头文件&#xff1a;#include <semaphore.h> 类型&#xff1a;sem_t 初始化&#xff1a;int sem_init(sem_t *sem, int pshared, unsigned int value); //程序中第一次对指定信号量调用p、v操…

如何使用k8s安装minio呢

话不多说&#xff0c;直接干货。 创建 minio-deployment.yaml apiVersion: apps/v1 kind: Deployment metadata:name: miniolabels:app: minio spec:replicas: 1selector:matchLabels:app: miniotemplate:metadata:labels:app: miniospec:containers:- name: minioimage: reg…

设计模式:17、单件模式(单例模式)

目录 0、定义 1、单件模式的一个角色 2、单件模式的UML类图 3、示例代码 0、定义 保证一个类仅有一个实例&#xff0c;并提供一个访问它的全局访问点。 1、单件模式的一个角色 单件类&#xff08;Singleton&#xff09;:单件类只可以创建出一个实例。 2、单件模式的UML类…

前端常用缓存技术深度剖析

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

任务管理法宝:甘特图详解

在项目管理中&#xff0c;如何清晰、直观地展示项目的进度和任务分配&#xff1f; 甘特图作为一种经典的项目管理工具&#xff0c;提供了有效的解决方案。无论是团队合作还是个人项目管理&#xff0c;甘特图都能帮助你轻松追踪各项任务的进展。今天&#xff0c;我们将详细介绍…

leetcode 62.不同路径

1.题目要求: 2.解题思路: 利用动态规划去解此题 3.题目代码: class Solution { public:int uniquePaths(int m, int n) {//创建dp数组vector<vector<int>> dp;dp.resize(m);for(int i 0;i < dp.size();i){dp[i].resize(n);}//确定dp数组的含义//初始化for(i…

电子应用设计方案-38:智能语音系统方案设计

智能语音系统方案设计 一、引言 智能语音系统作为一种便捷、自然的人机交互方式&#xff0c;正逐渐在各个领域得到广泛应用。本方案旨在设计一个高效、准确、功能丰富的智能语音系统。 二、系统概述 1. 系统目标 - 实现高准确率的语音识别和自然流畅的语音合成。 - 支持多种语…

UE5 C++ 不规则按钮识别,复选框不规则识别 UPIrregularWidgets

插件名称&#xff1a;UPIrregularWidgets 插件包含以下功能 你可以点击任何图片&#xff0c;而不仅限于矩形图片。 UPButton、UPCheckbox 基于原始的 Button、Checkbox 扩展。 复选框增加了不规则图像识别功能&#xff0c;复选框增加了悬停事件。 欢迎来到我的博客 记录学习过…

计算机中各部件的选购

目录 1.主板的选购 2.CPU的选购 3.CPU散热器的选购 4.内存的选购 5.硬盘的选购 6.光驱的选购 7.光盘的选购 8.键盘的选购 9.鼠标的选购 10.扫描仪的选购 11.摄像头的选购 12.显卡的选购 13.显示器的选购 14.打印机的选购 15.声卡的选购 16.网卡的选购 17.交换…

第32天:安全开发-JavaEE应用Servlet路由技术JDBCMybatis数据库生命周期

时间轴&#xff1a; 32天主要学习内容&#xff1a; 1、JavaEE-HTTP-Servlet技术 2、JavaEE-数据库-JDBC&Mybatis java技术使用历史&#xff08;2023 &#xff09;&#xff1a; JavaEE-HTTP-Servlet&路由&周期: java学习范围&#xff1a; 3、Java: 功能:数据…

基于ZYNQ-7000系列的FPGA学习笔记7——按键控制蜂鸣器(模块化编写)

基于ZYNQ-7000系列的FPGA学习笔记7——按键控制蜂鸣器&#xff08;模块化编写&#xff09; 1. 实验要求2. 功能分析3. 模块设计4. 波形图4.1 按键消抖模块4.2 按键控制蜂鸣器模块 5.代码编写5.1 rtl代码5.2 测试代码 6. 代码仿真7. 添加约束文件并分析综合 在上期的内容中&…

k8s,声明式API对象理解

命令式API 比如&#xff1a; 先kubectl create&#xff0c;再replace的操作&#xff0c;我们称为命令式配置文件操作 kubectl replace的执行过程&#xff0c;是使用新的YAML文件中的API对象&#xff0c;替换原有的API对象&#xff1b;而kubectl apply&#xff0c;则是执行了一…