axios是一個基于Promise的HTTP客戶端,可以使我們在瀏覽器和Node.js中發送請求。在Vue中,我們通常使用axios來請求數據。
但是,在請求數據的時候,我們經常需要在請求發送前和響應返回后進行一些操作,比如設置請求頭,根據響應狀態碼進行不同的處理等。這時候,就可以利用axios的攔截器對請求和響應進行攔截和處理。
攔截器是axios中用于攔截請求和響應的函數,每個攔截器分別接收一個入參config(請求配置對象)和response(響應對象),并且必須返回一個config或者Promise.resolve(config)(請求攔截器)或response或者Promise.resolve(response)(響應攔截器)。
// 全局設置請求頭 axios.interceptors.request.use(config =>{ config.headers.Authorization = 'Bearer ' + getToken() return config }) // 全局捕捉錯誤 axios.interceptors.response.use(response =>{ return response }, error =>{ if (error.response.status === 401) { router.push('/login') } return Promise.reject(error) })
在上面的代碼中,我們為axios設置了兩個攔截器,一個用于設置請求頭,一個用于全局捕捉錯誤。請求攔截器在請求發送前執行,響應攔截器在響應返回后執行。
需要注意的是,每個axios實例也可以單獨設置自己的攔截器,當要對某些請求單獨設置時,這種方式會更加靈活。
const instance = axios.create({ baseURL: '/api' }) instance.interceptors.request.use(config =>{ const token = window.localStorage.getItem('token') if (token) { config.headers.Authorization = 'Bearer ' + token } return config })
上面的代碼中,我們創建一個axios實例,然后對它設置了一個請求攔截器,用來添加請求頭。
利用axios的攔截器,不僅可以方便地進行全局的請求處理、錯誤處理等等,也可以針對具體的請求進行特定的處理,增強了應用的可維護性和靈活性。