在开发vue项目的时候,测试人员给我提了一个bug:“苹果自带浏览器登录后杀死浏览器重新进入后,页面刷新所有数据不显示”。
我仔细的回顾了一下代码,感觉我的代码没有什么问题,问测试要来了测试机,解决发现问题是真是存在的,然后我首先认为是因为vue路由没有读取到,我修改了一下路由参数的传递方式,结果发现并不是这个原因。然后我查看了一下网络请求,发现没有token,然后我有所顿悟,发现是因为苹果浏览器杀死重进以后并不直接进入登录页面,而是直接返回原先的页面。而我的token是从登录接口中获取的。这样就导致我在网络请求中无法读取到token,然后页面中没有请求的数据。
我的解决方案如下:
设置一个全局守卫,在路由更新的时候判断token是否存在,如果不存在直接跳转到登录页
router.beforeEach((to,from,next)=>{
if (to.path=='/'){
next();
}else {
let token=store.state.token
if (token=='null'||token==''){
next('/')
}else {
next()
}
}
})
这样我们就成功解决了问题。