vue axios 封装请求,用户过期时及时中断后续请求
1.使用vuex全局变量存取
const store = new Vuex.Store ({ state: { axiosCancelArr: [] }, mutations: { PUSH_CANCEL(state, cancel) { state.axiosCancelArr.push(cancel.cancelToken) }, CLEAR_CANCEL(state) { state.axiosCancelArr.forEach(e => { e && e() }) state.axiosCancelArr = [] } }, actions: { pushCancel({ commit }, cancel) { commit('PUSH_CANCEL', cancel) }, clearCancel({ commit }) { commit('CLEAR_CANCEL') } } })
export default store
2.request.js关键代码
//请求拦截器
axios.interceptors.request.use(res => {
res.cancelToken = new axios.CancelToken(cancel => {
store.dispatch('pushCancel', { cancelToken: cancel })
})
})
//响应拦截器
axios.interceptors.response.use(res => {
const data = res.data
//判断是否取消后续请求
if (data.code === '401') {
store.dispatch('clearCancel')
}
})
3.使用路由拦截器,跳转路由时调用clearCancel方法,清空存入的信息,终止未请求成功的请求
router.beforeEach((to, from, next) => {
store.dispatch('clearCancel')
next()
})
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通