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" ...
随机推荐
- 【Layui】09 动画 Anim
文档地址: https://www.layui.com/demo/anim.html 8种动画 <fieldset class="layui-elem-field layui-fiel ...
- Google搜索居然也搞言论封锁
昨天的一个blog: https://www.cnblogs.com/devilmaycry812839668/p/18334275 居然被Google搜索封禁了: 老美,你的言论自由呢???怎么到了 ...
- 人机协同的半自动人形机器人 —— Covariant公司的RFM-1机器人
Covariant公司的RFM-1机器人实现了一个极为有意思的功能,那就是在机器人执行任务的过程中如果遇到无法处理的情况下就会停止下来然后等待人类的语言指示,比如:夹具向上移动2cm,更换更大型号的夹 ...
- 在深度学习的视觉VISION领域数据预处理的魔法常数magic constant、黄金数值的复现: mean=[0.485, 0.456, 0.406],std=[0.229, 0.224, 0.225]
代码: https://gist.github.com/pmeier/f5e05285cd5987027a98854a5d155e27 import argparse import multiproc ...
- 【简单菊花图】Codeforce 1583Problem - B.md
1583Problem - B - Codeforces 题目大意:n个点的无根树 给出m个限制条件 (a,c,b)在a到b路径上不能存在c点,求任意一种可能的树的所有边 注意数据范围:1<m& ...
- MySQL手动执行rollback,内部实现分析
-- 测试手动回滚操作 -- 1手动开启事务 START TRANSACTION -- 2执行更新操作语句 UPDATE FraBakNtuAnalysize SET IsDeleted = 0 WH ...
- 用whl文件安装Anaconda中的GDAL
本文介绍在Anaconda环境下,基于.whl文件安装Python中高级地理数据处理库GDAL的方法. 在之前的文章中,我们介绍了基于conda install命令直接联网安装GDAL库的方法 ...
- QTreeWidget绑定QTabWidget
QTreeWidget绑定QTabWidget 本文仅供本人知识总结使用,所以内容会比较浅显,不喜勿喷. 文章目录 QTreeWidget绑定QTabWidget 一.通过treeWidget路径配合 ...
- 网站接入qq登录
网站接入qq登录可以省去注册账号,增加网站的体验度.那么要实现我自己搭建的站点天天博客的qq单点登录需要以下几个步骤:1,申请appid和appkey 首先要去https://connect.qq.c ...
- 【Jenkins】之自动化测试持续集成
一.创建jenkins项目 选择节点 创建指定名称的目录名: 写命令,执行shell: 命令填写: # 引入电脑配置文件 #. ~/.bash_profile cd Python_Interface ...