DOMException: Failed to execute 'setRequestHeader' on 'XMLHttpRequest': 'function (header, parser) { header = normalizeHeader(header);
场景:token过期,然后更新了token 重新发起请求获取数据 ;
代码:使用上一次的错误请求配置报错 return request(error.config) ;
解决 :
// 添加响应拦截器
request.interceptors.response.use(
function (response) {
// console.log({ response });
// 对响应数据做点什么
console.log("响应拦截器成功的");
console.log("token没有过期");
console.log(response);
return response;
},
async function (error) {
// 错误原因:1. 没有登录本地没有存储token 2. token过期了 (注意是token 不是refresh_token过期了)
// 对响应错误做点什么 token 过期或者没有携带token
/**
*
第一次是每次请求都会携带本地的短token,
如果某一次出错即是短token失效,
第二次那个401是你请求使用长token刷新短token的错误代码;
*/
console.log("响应拦截器失败的");
console.log(error.config);
if (error.response && error.response.status === 401) {
// console.log("token过期了,跳转到登录页面");
// router.push("/login");
// 出现 401 错误 则说明短token过期了 需要执行刷新token逻辑
const user = store.state.user; // 从 vuex == 本地获取 user
// 如果本地没有token存储就去登录页面,没有token就是没有登录 不存在过期问题
if (!user) {
console.log("没有登录,本地没有token,直接去登录页面");
return router.push("/login");
}
// 有token 说明已经登录了 可能是登录token过期问题 我们就刷新token
// 可以把本地的token 或者 refresh_token修改然后测试token过期问题
try {
// 发起更换token的请求 参数是 refresh_token
console.log("发起更换token的请求");
console.log("token过期了");
// await refreshTokenApi(user.refresh_token) ; // 坑 !!! 不能使用 rquest 实例发起请求 因为在请求拦截器统一了token(使用的是token) 但是我封装的更新tokne接口使用的是 refresh_token 故我们要使用干净的 axios 去发起请求
const { data } = await axios({
url: "http://toutiao.itheima.net/v1_0/authorizations",
method: "put",
// 设置请求头
headers: {
Authorization: `Bearer ${user.refresh_token}`,
},
});
// 把返回的新token 保存起来
store.commit("setUserToken", {
token: data.data.token,
refresh_token: user.refresh_token,
});
// 继续上一次的出错请求(因为token导致的) 请求userInfo数据出错了
// 然后我更新了token 重新发起请求 请求 userInfo 数据
// return request(error.config) // 把之前的错误配置项传入传入即可 现在的配置项是正确的 (因为token更新了)
// return request(error.config); // 这句是错误的 因为 axios 更新升级了 之前的配置项的请求头如果在就不做调整了(不在修改了)
// console.log({
// ...error.config,
// headers: {},
// });
// ... 剩余参数在对象里面的使用
// console.log({ ...{ type: "get" }, name: "zlx" });
// {type: 'get', name: 'zlx'}
// return request({
// ...error.config,
// headers: {},
// });
} catch (err) {
// 原因 : 这里出错了说明我的更新token报错了 说明是长token(就是refresh_token )过期了
// ps:此项目的token过期时间 2 小时 refresh_token 过期时间 15 天
if (error.response && error.response.status === 401) {
console.log("refresh_token过期了 重新登录");
return router.push("/login");
} else {
// 或者其它网络错误
console.log("Promise.reject(err)是个啥");
return Promise.reject(err);
}
}
}
return Promise.reject(error);
}
);
DOMException: Failed to execute 'setRequestHeader' on 'XMLHttpRequest': 'function (header, parser) { header = normalizeHeader(header);的更多相关文章
- Failed to execute 'setRequestHeader' on 'XMLHttpRequest': The object's state must be OPENED.
在设置请求头的时候报这个Failed to execute 'setRequestHeader' on 'XMLHttpRequest': The object's state must be OPE ...
- vue 运行项目时,Uncaught (in promise) DOMException: Failed to execute 'open' on 'XMLHttpRequest': Invalid URL
npm run dev 运行项目后 验证码显示不出来 并报错 Uncaught (in promise) DOMException: Failed to execute 'open' on 'XML ...
- Uncaught (in promise) DOMException: Failed to execute 'open' on 'XMLHttpRequest': Invalid URL
解决方案:url前面一定要加http://
- mui.min.js:7 Uncaught DOMException: Failed to execute 'send' on 'XMLHttpRequest': Failed to load
mui框架做的微信公众号网页,在上传数据的时候报了这个错,async: true,//将false改为true就可以了 https://blog.csdn.net/liuzp111/article/d ...
- DOMException: Failed to execute 'open' on 'XMLHttpRequest': Invalid URL 未能在“xmlhttpRequest”上执行“open”:无效的URL。
出现这个报错主要是baseurl:http://192.168.*.*/后面的(/)或是请求里面的url:/user/login中前面的(/)有一个漏掉了,导致合成的路径不完整,所以报错:无效的URL
- Uncaught DOMException: Failed to execute 'toDataURL' on 'HTMLCanvasElement': Tainted canvases may not be exported
Uncaught DOMException: Failed to execute 'toDataURL' on 'HTMLCanvasElement': Tainted canvases may no ...
- 使用wpaint绘图软件时:Uncaught DOMException: Failed to execute 'drawImage' on 'CanvasRenderingContext2D': The image argument is a canvas element with a width or height of 0.
使用wpaint绘图软件时:Uncaught DOMException: Failed to execute 'drawImage' on 'CanvasRenderingContext2D': Th ...
- wordpress 点击文章图片 不能编辑(chrome下面) wordpress Uncaught DOMException: Failed to execute 'setBaseAndExtent' on 'Selection': There is no child at offset 1.
说明:在chrome下面,编辑文章插入的图片,点击到图片上面,没有菜单显示. 报错: tinymce.min.js:10 Uncaught DOMException: Failed to execut ...
- NetworkError: Failed to execute 'send' on 'XMLHttpRequest': Failed to load xxxx错误解决方法
在开发项目的过程中,和后端对接,我们使用是一个成熟的集成很全面的架构JHipster.后端为java spring-boot 前端ts+react,需求是有一个需要在页面里嵌套iframe的需求.然后 ...
- 解决 canvas 将图片转为base64报错: Uncaught DOMException: Failed to execute 'toDataURL' on 'HTMLCanvasEleme...
问题描述 当用户点击分享按钮时,生成一张海报,可以保存图片分享到朋友圈,用户的图片是存储在阿里云的OSS,当海报完成后,执行.canvas.toDataURL("image/png" ...
随机推荐
- ViT:拉开Trasnformer在图像领域正式挑战CNN的序幕 | ICLR 2021 —— An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale
论文地址: https://arxiv.org/abs/2010.11929 Github地址: https://github.com/google-research/vision_transform ...
- 【转载】 ReLu(Rectified Linear Units)激活函数
原文地址: https://www.cnblogs.com/neopenx/p/4453161.html ============================== 论文参考:Deep Sparse ...
- 国产计算框架mindspore在gpu环境下编译分支r1.3,使用suod权限成功编译并安装,成功运行——(修复部分bug,给出具体编译和安装过程)—— 第二部分:源码编译及编译后文件安装、运行
前文: 国产计算框架mindspore在gpu环境下编译分支r1.3,使用suod权限成功编译并安装,成功运行--(修复部分bug,给出具体编译和安装过程)-- 第一部分:依赖环境的安装 我们已经进行 ...
- python库 —— gym retro 的 ROMs文件下载地址
如题: python库 -- gym retro 的 ROMs文件下载地址: https://archive.org/details/No-Intro-Collection_2016-01-03_Fi ...
- 美的(Midea)超声波清洗机 眼镜清洗机 超声波洗眼镜 首饰剃须刀手表假牙牙套化妆刷 洗眼镜机超声波 MXV-01 —— 工业设计上的重大问题分析
前段时间买了一个美的的超声波清洗机,就是那种超声波洗眼镜的那种,本着买个高档的可以分体的那种好清洗的原则,就在JD上千挑万选后买了下面的这个货: 链接地址: https://item.jd.com/1 ...
- LVGL line组件
目录 一.Line(线条)的概念 二.线条组件的使用 1.创建线条对象 2.设置点数组 3.确定y轴的方向(可选) 4.设置线条风格(可选) 4.1创建风格 4.2设置风格 5.将创建好的线段组件添加 ...
- blender-1-基本快捷键
https://www.bilibili.com/video/BV14u41147YH?p=3&vd_source=e3899eab0ab1c2da60e189bdce9ed666 跟他学的 ...
- SpringBoot复习
SpringBoot 开启事务:Application 加@EnableTransactionManagement ,Service方法加@Transaction 注解 注意:@Transaction ...
- 2.2 Memory model
1. 内存区域.类型及属性 内存被分成不同的区域,不同区域有着不同的类型及属性:内存的类型及属性决定着访问这些区域时的行为. 内存的类型有: Normal,处理器可以为了效率而重新排序事务,或者执行推 ...
- 目标追踪 ByteTrack 算法详细流程分析
原理介绍 ByteTrack是字节跳动与2021年10月份公开的一个全新的多目标跟踪算法,原论文是<ByteTrack: Multi-Object Tracking by Associating ...