淺談Vue網(wǎng)絡請求之interceptors實際應用
項目背景
最近在項目開發(fā)中,遇到下面這樣一個問題:
- 在進行銘感操作之前,每個請求需要攜帶token,但是token 有有效期,token 失效后需要換取新的token并繼續(xù)請求。
需求分析
- 每個請求都需要攜帶 token ,所以我們可以使用 axios request 攔截器,在這里,我們給每個請求都加 token,這樣就可以節(jié)省每個請求再一次次的復制粘貼代碼。
- token 失效問題,當我們token 失效,我們服務端會返回一個特定的錯誤表示,比如 token invalid,但是我們不能在每個請求之后去做刷新 token 的操作呀,所以這里我們就用 axios response 攔截器,我們統(tǒng)一處理所有請求成功之后響應過來的數(shù)據(jù),然后對特殊數(shù)據(jù)進行處理,其他的正常分發(fā)。
功能實現(xiàn)
分析完問題后,我們來實現(xiàn)功能
安裝axios, 這里我們就贅述怎么安裝axios.
在 main.js 注冊 axios
Vue.use(Vuex) Vue.use(VueAxios, axios) Vue.use(qs)
注:qs,使用axios,必須得安裝 qs,所有的Post 請求,我們都需要 qs,對參數(shù)進行序列化。
在 request 攔截器實現(xiàn)
axios.interceptors.request.use( config => { config.baseURL = '/api/' config.withCredentials = true // 允許攜帶token ,這個是解決跨域產(chǎn)生的相關問題 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 攔截器實現(xiàn)
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) } )
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
詳解Vue項目中出現(xiàn)Loading chunk {n} failed問題的解決方法
這篇文章主要介紹了詳解Vue項目中出現(xiàn)Loading chunk {n} failed問題的解決方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-09-09vue3子組件上綁定(v-model="xx")父組件傳過來的值后報錯解決
這篇文章主要給大家介紹了關于vue3子組件上綁定(v-model="xx")父組件傳過來的值后報錯解決辦法,文中通過示例代碼介紹的非常詳細,對大家學習或者使用vue3具有一定的參考學習價值,需要的朋友可以參考下2023-07-07vue 內(nèi)置過濾器的使用總結(jié)(附加自定義過濾器)
這篇文章主要介紹了vue 內(nèi)置過濾器的使用總結(jié)(附加自定義過濾器),詳細的介紹了各種過濾器的使用,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-12-12vue使用路由守衛(wèi)實現(xiàn)菜單的權(quán)限設置
我們使?vue-element-admin前端框架開發(fā)后臺管理系統(tǒng)時,?般都會涉及到菜單的權(quán)限控制問題,下面這篇文章主要給大家介紹了關于vue使用路由守衛(wèi)實現(xiàn)菜單的權(quán)限設置的相關資料,需要的朋友可以參考下2023-06-06vue+element開發(fā)使用el-select不能回顯的處理方案
這篇文章主要介紹了vue+element開發(fā)使用el-select不能回顯的處理方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-07-07