发布时间:2024-12-03 08:01
响应拦截器的作用是在接收到响应后进行一些操作,例如在服务器返回登录状态失效,需要重新登录的时候,跳转到登录页。就是在请求结果返回后,先不直接导出,而是先对响应码等等进行处理,处理好后再导出给页面,如果将这个对响应码的处理过程抽出来,就成了所谓的响应拦截器;
// 添加响应拦截器
instance1.interceptors.response.use(function (response) {
return response
}, async function (error) {
// 如果发生了错误,判断是否是401
console.dir(error)
// 开始处理
return Promise.reject(error)
})
当发送某一次请求axios后,后台报401错误,可能是tonken过期了或是还没有tonken
有新token后需要重新刷新vuex
使用新token重新请求axios
import router from '../router/auth.js'
// 响应拦截器
request.interceptors.response.use(function (response) {
console.log('响应拦截器', response)
return response
}, async function (error) {
// 如果发生了错误,判断是否是401
console.dir(error)
if (error.response.status === 401) {
// 开始处理
console.log('响应拦截器-错误-401')
const refreshToken = store.state.tokenInfo.refresh_token
// if (有refresh_token) {
if (refreshToken) {
// 1. 请求新token
try {
const res = await axios({
url: 'http://localhost:8000/v1_0/authorizations',
method: 'PUT',
headers: {
Authorization: `Bearer ${refreshToken}`
}
})
console.log('请求新token', res.data.data.token)
// 2. 保存到vuex
store.commit('mSetToken', {
refresh_token: refreshToken,
token: res.data.data.token
})
// 3. 重发请求
// request是上面创建的axios的实例,它会自动从vuex取出token带上
return request(error.config)
} catch (error) {
// 清除token
store.commit('mSetToken', {})
// 去到登录页(如果有token值,就不能到login)
const backtoUrl = encodeURIComponent(router.currentRoute.fullPath)
router.push('/login?backto=' + backtoUrl)
return Promise.reject(error)
}
} else {
// 去到登录页
// 清除token
store.commit('mSetToken', {})
const backtoUrl = encodeURIComponent(router.currentRoute.fullPath)
router.push('/login?backto=' + backtoUrl)
return Promise.reject(error)
}
} else {
return Promise.reject(error)
}
})
router.currentRoute: 表示当前路由对象,如果是在.vue中,就可以用this.$route。
响应拦截器要加在axios实例 request上。
用refresh_token请求新token时,要用axios,不要用实例request
得到新token之后,再发请求时,要用request实例
R计算两列数据的相关系数_数据相关性分析 correlation - R实现
vscode import别名(如@)文件无法ctrl+左键跳转
【计算讲谈社】第六讲|三星堆奇幻之旅:只有云计算才能带来的体验
Play to earn?Axie Infinity已成为NFT游戏天花板、领军Web3
JavaScript变量声明的var、let、const详解
苹果icloud登录_如何在Windows电脑上使用苹果iCloud服务?
python网络爬虫从入门到精通吕云翔pdf_Python网络爬虫从入门到精通 吕云翔 张扬 韩延刚 等编著 PythonPython3.6网络爬虫爬虫JavaScript爬虫实战自学手册...