在我們開發前端頁面或者構建前后端分離的工程時,常常會用到axios庫來發送請求和處理響應。而在axios中,攔截器是一個非常方便而且強大的功能,通過它我們可以在請求發送和響應返回的過程中,對數據進行統一的處理和修改,從而達到我們預期的目標。
舉個例子,比如我們要向后端請求一個用戶信息,如果用戶未登錄,則返回錯誤信息,我們可以通過axios攔截器來統一實現這個邏輯:
axios.interceptors.request.use(config =>{ config.headers.token = localStorage.getItem('token') return config; }, error =>{ console.log(error); }); axios.interceptors.response.use(response =>{ const data = response.data; if(data.code === 401){ //未登錄情況下返回的代碼為401 localStorage.removeItem("token"); //清空本地儲存的token location.href="/login" //跳轉到登錄頁面 } return response; }, error =>{ console.log(error); });上述代碼是一個完整的axios請求攔截器和響應攔截器示例,它的主要作用是:在請求頭中攜帶本地存儲中的token信息,并且在返回數據時判斷是否存在錯誤代碼401。如果存在則清空token信息并跳轉到登錄頁面。 除了實現統一的請求和響應邏輯,axios攔截器還可以實現各種各樣的場景需求,比如統一處理請求超時、處理通用的網絡錯誤、實現多語言切換等等。總的來說,它為我們的開發提供了非常便捷的解決方案,同時降低了我們的代碼量和復雜度。 當然,在使用攔截器的時候,我們也需要注意一些問題,以下是一些常見的錯誤: 1.多個攔截器順序問題。比如在請求攔截器中設置token,在響應攔截器中檢查失效的邏輯。如果順序不對,就會產生意想不到的問題。 2.沒有正確地捕獲錯誤。如果我們在攔截器中對錯誤沒有做處理,那么即使服務器傳回了錯誤碼和異常信息,但也不會被我們正確的捕獲到。 3.不適當的使用攔截器。攔截器的目的是實現請求和響應數據的處理,但并不能代替我們進行數據校驗、安全性校驗等工作。使用攔截器時,最好將它的功能限制在數據的預處理、請求狀態的更新等方面。 總的來說,axios是一個非常方便而且靈活的 Ajax 庫,它的強大不僅僅在于接口的封裝,也不僅僅在于攔截器的使用。在應用中,我們還可以通過axios來實現更加復雜的場景,比如Vue的高級特性中的mixin和computed,vuex的狀態管理等等。如果您感興趣,請自行深入研究,相信這會為您的開發工作帶來更加便捷和高效的解決方案。