脚本宝典收集整理的这篇文章主要介绍了[ Vue ] 网络请求之 interceptors 实际应用,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
最近在项目开发中,遇到下面这样一个问题:
在进行铭感操作之前,每个请求需要携带token,但是token 有有效期,token 失效后需要换取新的token并继续请求。
token invalid
,但是我们不能在每个请求之后去做刷新 token
的操作呀,所以这里我们就用 axios response 拦截器,我们统一处理所有请求成功之后响应过来的数据,然后对特殊数据进行处理,其他的正常分发。分析完问题后,我们来实现功能
main.js
注册 axiosVue.use(Vuex)
Vue.use(VueAxios, axios)
Vue.use(qs)
注:qs
,使用axios,必须得安装 qs,所有的Post 请求,我们都需要 qs,对参数进行序列化。
request
拦截器实现axios.interceptors.request.use(
config => {
config.baseURL = '/api/'
config.withCredentials = true // 允许携带token ,这个是解决跨域产生的相关问题
config.timeout = 2500
let token = sessionStorage.getItem('access_token')
let csrf = store.getters.csrf
if (token) {
config.headers = {
'access-token': token,
'Content-Type': 'application/x-www-form-urlencoded'
}
}
if (config.url === 'refresh') {
config.headers = {
'refresh-token': sessionStorage.getItem('refresh_token'),
'Content-Type': 'application/x-www-form-urlencoded'
}
}
return config
},
error => {
return Promise.reject(error)
}
)
response
拦截器实现axios.interceptors.response.use(
response => {
// 定时刷新access-token
if (!response.data.value && response.data.data.message === 'token invalid') {
// 刷新token
store.dispatch('refresh').then(response => {
sessionStorage.setItem('access_token', response.data)
}).catch(error => {
throw new Error('token刷新' + error)
})
}
return response
},
error => {
return Promise.reject(error)
}
)
以上是脚本宝典为你收集整理的[ Vue ] 网络请求之 interceptors 实际应用全部内容,希望文章能够帮你解决[ Vue ] 网络请求之 interceptors 实际应用所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。