当前位置: 首页 > Web前端 > vue.js

token过期很久后,请求没有returnbody问题

时间:2023-03-31 16:35:11 vue.js

环境vue项目,axios,JwtToken问题前端页面长时间未登陆后,发送请求无响应,发送任何请求都不存在返回体问题。问题复现在使用axios的过程中,通常会使用拦截器来统一过滤一些异常返回,比如下面的代码:axios.interceptors.response.use(function(response){loadingInstance.close();returnresponse;},function(error){//处理响应错误loadingInstance.close();if(error.response){switch(error.response.status){case401:console.log('401,logout.');//401清除token信息并跳转到登录页面403://403Unauthorized,跳转到首页);在上面的axios拦截器配置中,通过拦截返回body的错误状态(error.response.status),可以统一处理token过期的401情况。当token过期后,如果你再次发送请求,就会进入拦截器,实现自动登出的功能。但是,当页面打开时间长了,就等到第二天再用吧。会出现点击任意位置都会报错,不会退出。通过查看请求返回信息,发现根本就没有返回体,自然我们的拦截器就拦截不到token过期了。找到原因后,在拦截器中添加这段代码:axios.interceptors.response.use(function(response){loadingInstance.close();returnresponse;},function(error){//DosomethingwithresponseerrorloadingInstance.close();if(error.response){letisLogin=store.getters['user/isLogin'];switch(error.response.status){case401:console.log('401,logout.');//401清除token信息,跳转到登录页面403://403没有权限,跳转到首页router.replace({path:'/home',query:{redirect:router.currentRoute.fullPath}});break;}}else{//如果没有返回正文,注销store.commit('user/clearUser');router.replace({path:'/',query:{redirect:router.currentRoute.fullPath}});console.log('无响应,退出。');}返回Promise.reject(error);});也就是说,当返回信息中没有requestbody时,直接注销,就解决了这个怪问题。