关于Token过期导致页面多个请求报错提示的问题

我们先在全局定义一个变量(global.js)来控制token是否过期

export default {
// token无效标记
TokenInvalidFlag:false
}

在路由拦截器里引入变量来判断是否过期进行判断

//request.js
import axios from 'axios'
import { Message } from 'element-ui'
import store from '../store'
import route from '../router'
import global from '@/utils/const/global'
// create an axios instance
const service = axios.create({
baseURL: '/', // url = base url + request url
withCredentials: true, // send cookies when cross-domain requests
timeout: 1000 * 60 // request timeout
}) // request interceptor
service.interceptors.request.use(
config => {
const token = `${store.state.user.token}` if (token) config.headers['Authorization'] = `Bearer ${token}` config.headers['sn-common'] = `version=v2&app=20200902&channel=web_admin`
store.commit('handleLoading',true);
// get参数编码
if (config.method === 'get' && config.params) {
let url = config.url
if (url.indexOf('?') === -1) {
url += '?'
} else {
url += '&'
}
const keys = Object.keys(config.params)
for (const key of keys) {
if (config.params[key] !== undefined && config.params[key] !== '') {
url += `${encodeURIComponent(key)}=${config.params[key]}&`
}
}
url = url.substring(0, url.length - 1)
config.params = {}
config.url = url
}
return config
},
error => {
console.log(error) // for debug
return Promise.reject(error)
}
) // response interceptor
service.interceptors.response.use(
response => {
if (response.data.code === -22) {
if(global.TokenInvalidFlag===false){
Message.error('登录态失效,请重新登录!');
global.TokenInvalidFlag = true;
store.dispatch('user/signOut').then(() => {
route.push({ name: 'login', params: {redirectFlag: true} })
})
}
} else if (response.status !== 200) {
Message.error(response.message || 'Error')
}else{
global.TokenInvalidFlag = false
}
// 如果是java服务
if(response.config.url.indexOf('/java/api') != -1) {
if (response.data.code != 0) {
Message.error(response.data.message || 'Error')
}
}
store.commit('handleLoading',false);
// Cannot read property 'data' of undefined
return response.data
},
error => {
if (error.response.status === 401) {
if(global.TokenInvalidFlag===false){
Message.error('登录态失效,请重新登录!')
store.dispatch('user/signOut').then(() => {
route.push({ name: 'login', params: {redirectFlag: true} })
});
global.TokenInvalidFlag = true;
} } else {
Message({
message: error.response.data.error_message,
type: 'error',
duration: 5 * 1000
})
}
store.commit('handleLoading',false);
return Promise.reject(error)
}
) export default service

Token过期导致页面多个请求报错提示多次的更多相关文章

  1. JS请求报错:Unexpected token T in JSON at position 0

    <?php /* 最近做一个ajax validate表单验证提交的代码,在ajax提交的时候 JS请求报错:Unexpected token T in JSON at position 0 描 ...

  2. 【转】JSON.parse() Unexpected token i in JSON at position 2 报错问题

    JSON.parse(): Unexpected token i in JSON at position 2 报错问题 错误代码: var res = "[{id:1,name:'limin ...

  3. nuget包管理nuget服务器发布包时出现请求报错 406 (Not Acceptable)

    在window服务器上部署nuget服务器时,发布包时出现请求报错 406 (Not Acceptable) 验证用户名.密码正确的情况下,还是出现上面错误.后面跟踪服务器日志,发现window\te ...

  4. Xcode7 beta 网络请求报错:The resource could not be loaded because the App Transport Security policy requires the use of a secure connection.

    Xcode7 beta 网络请求报错:The resource could not be loaded because the App Transport Xcode7 beta 网络请求报错:The ...

  5. Xcode7 beta 网络请求报错:The resource could not be loaded because the App Transport

    Xcode7 beta 网络请求报错:The resource could not be loaded because the App Transport Xcode7 beta 网络请求报错:The ...

  6. git https 请求报错 504

    git https 请求报错 504 原因可能是因为设置了代理,ubuntu/deepin 系统可以检查 /etc/profile ~/.bashrc 内有没有设置 https 的代理. 有的话,去掉 ...

  7. Android版本28使用http请求报错not permitted by network security policy

    Android版本28使用http请求报错not permitted by network security policy android模拟器调试登录的时候报错 CLEARTEXT communic ...

  8. 页面白屏并且报错PHP Parse error: syntax error, unexpected end of file in 试了很久总算解决了

    页面白屏并且报错PHP Parse error:  syntax error, unexpected end of file in 试了很久 啥短标记,打开,都试了 最简单的办法 是重新建立一个文件, ...

  9. mac下连接本地安装的mysql报错提示密码过期

    前提: mac中之前安装了mysql,一段时间没使用,今天使用mysql客户端去连接,报错提示密码过期,原因是mysql5.7之后版本有密码过期这个功能. error: Your password h ...

  10. 【js监听报错】页面监听js报错问题

    <html> <head> <script type="text/javascript"> // 页面监听js报错问题 onerror=hand ...

随机推荐

  1. Pytest 固件

    一.固件使用背景 在执行测试用例时,我们常常需要在测试用例执行的前后去完成一些额外的操作.例如针对于 Web 测试,在用例执行前需要打开浏览器,完成用户登录等一系列前置操作:在用例执行完成后,要清除浏 ...

  2. Angular JS入门 (一)事件监听(二)多控制器思想与模块化编程(三)路由router

    Angular JS入门 ️将流式结构--->模块化 一.事件监听 1.事件监听 前言 NG框架中通过对元素标签添加[ng-事件名] 指令,来对元素添加事件监听 而事件监听的回调函数需要在con ...

  3. Dockerfile打包java应用

    #基础镜像 FROM openjdk:8-jre # 作者 MAINTAINER hg #挂载目录 VOLUME /home/hg #创建目录 RUN mkdir /home/hg #指定工作目录 W ...

  4. js原生判断数字类型

    js判断数字类型汇总最近在写代码的时候,有些逻辑需要判断数字类型,等用到的时候才发现自己了解的方法不太严密,然后就决心查资料汇总了解下有哪些方法比较严密 第一种:typeof + isNaN使用typ ...

  5. MargeSort

    归并排序(Merge Sort)是建立在归并操作上的一种有效,稳定的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用.将已有序的子序列合并,得到完全有序的序列: ...

  6. 关于MYSQL知识点复习

    关于MYSQL关联查询JOIN:   https://www.cnblogs.com/withscorpion/p/9454490.html

  7. (0720) 【 表示 n'b0; 】

    注意 花括号: (n+1)'b1 小括号:

  8. 批量修改excel中超链接

    打开需要处理的excel文件 alt + F11打开VB编辑器 双击打开对应的sheet 编辑如下代码 Dim oldfile As String Dim Newfile As String Sub ...

  9. Java 查找Panel 里的某个组件 比如 按钮

    遇到到一个需求,需要获取界面里的一个按钮,但是这个按钮是封装的父类嵌入的,知道label 的值. 写了一个递归获取它 1 private JButton LookupTheButton(Compone ...

  10. MySQL中的sql优化

    目标: 掌握SQL调优的原则 掌握SQL调优的基本逻辑 掌握优秀SQL的编写方案 掌握何为慢SQL以及检测方案 SQL优化原则 1.减少数据量(表中数据太多可以分表,例如超过500万数据  双11一个 ...