1.定義:響應攔截器(Response Interceptor)是一個可以在 axios
接收到服務器響應后,響應數據交給 .then()
處理之前執行的函數。你可以用它來統一處理響應數據,進行錯誤處理,或者對返回的數據做格式化和轉換等操作。
2.怎么使用axios響應攔截器
在 axios
中,響應攔截器是通過 axios.interceptors.response.use()
方法來添加的,而響應攔截器默認有倆個參數
第一個參數:響應成功時的回調函數。
第二個參數:響應失敗時的回調函數(用來捕獲錯誤,如網絡錯誤、HTTP 錯誤等)。
成功回調函數
當請求成功并且響應狀態碼在 2xx 范圍內時,這個函數會被調用。你可以在這里對響應數據進行處理,比如統一格式化數據、檢查狀態碼等。
失敗回調函數
當請求失敗時(如網絡錯誤、服務器錯誤、響應狀態碼不在 2xx 范圍內等),失敗回調函數會被觸發。你可以在這里統一處理錯誤,比如顯示錯誤消息,重試請求,或者記錄日志等
axios.interceptors.response.use(function (response) {const result = response.datareturn result
}),//第一個參數,當請求成功的時候,調用該函數function (error) {if (error?.response?.status === 401) {alert('身份登錄失敗,請重新登陸')localStorage.clear()location.href = '../login/index.html'}return Promise.reject(error)
}//第二個參數,請求失敗調用,并且彈窗
在響應返回的數據中response是?axios
?返回的響應對象包含了響應的所有信息。我們經常會從中獲取響應狀態碼來判斷響應是否成功。
3.?移除攔截器
如果不再需要某個攔截器,可以通過 eject
方法將其移除。這樣做的好處是可以靈活控制攔截器的生命周期,避免不必要的攔截操作。
// 獲取攔截器的 ID
const interceptorId = axiosInstance.interceptors.response.use(responseHandler, errorHandler);// 移除攔截器
axiosInstance.interceptors.response.eject(interceptorId);
這個移除方法有點像定時器的移除方法
4.常見應用場景
統一錯誤處理:在響應攔截器中統一處理 HTTP 錯誤,比如 404、500 錯誤,或者處理常見的業務錯誤。
響應數據格式化:比如你希望所有響應數據都以
{ code, data, message }
的格式返回,響應攔截器可以幫助你進行格式化。Token 過期處理:在攔截器中檢查
401 Unauthorized
錯誤,當 token 過期時,你可以自動進行 token 刷新,或者引導用戶重新登錄。