日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產(chǎn)品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
axios攔截響應報錯

在基于Promise的HTTP客戶端中,axios是一個廣泛使用的庫,它提供了一種簡潔明了的方式來發(fā)送異步HTTP請求到REST端點,在使用axios時,我們經(jīng)常需要對請求和響應進行攔截,以便于統(tǒng)一處理一些邏輯,例如認證失效、接口報錯、請求重定向等,以下將詳細討論如何使用axios的響應攔截器來處理報錯。

成都創(chuàng)新互聯(lián)長期為上1000+客戶提供的網(wǎng)站建設服務,團隊從業(yè)經(jīng)驗10年,關注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務;打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為華容企業(yè)提供專業(yè)的成都網(wǎng)站設計、成都網(wǎng)站制作、外貿(mào)網(wǎng)站建設,華容網(wǎng)站改版等技術服務。擁有十載豐富建站經(jīng)驗和眾多成功案例,為您定制開發(fā)。

我們需要設置axios的響應攔截器,響應攔截器允許我們在請求得到響應后,對響應數(shù)據(jù)進行處理或修改,這非常實用,因為我們可以在這里檢查HTTP狀態(tài)碼,并根據(jù)需要處理業(yè)務邏輯錯誤。

// 創(chuàng)建axios實例
const service = axios.create({
  // axios 配置項
});
// 響應攔截器
service.interceptors.response.use(
  response => {
    // 對響應數(shù)據(jù)做點什么
    const res = response.data;
    // 這里可以根據(jù)后端接口返回數(shù)據(jù)的結(jié)構進行判斷
    if (res.code !== 200) {
      // 業(yè)務邏輯錯誤處理
      // 可以根據(jù)實際情況,做彈出提示,或者其他的錯誤處理邏輯
      Message({
        message: res.message || 'Error',
        type: 'error',
        duration: 5 * 1000
      });
      // 如果是業(yè)務錯誤,我們返回一個Promise.reject,這樣可以在后續(xù)的.catch中捕獲
      return Promise.reject(new Error(res.message || 'Error'));
    } else {
      // 業(yè)務成功,返回response對象
      return response;
    }
  },
  error => {
    // 對響應錯誤做點什么
    if (error.response) {
      // 請求已發(fā)出,但服務器響應的狀態(tài)碼不在2xx的范圍
      const res = error.response.data;
      Message({
        message: res.message || 'Error',
        type: 'error',
        duration: 5 * 1000
      });
    } else if (error.request) {
      // 請求已經(jīng)發(fā)出了,但是沒有收到響應
      Message({
        message: 'Network Error',
        type: 'error',
        duration: 5 * 1000
      });
    } else {
      // 發(fā)送請求時出了點問題
      Message({
        message: error.message || 'Request Error',
        type: 'error',
        duration: 5 * 1000
      });
    }
    // 我們返回一個Promise.reject,這樣可以在后續(xù)的.catch中捕獲
    return Promise.reject(error);
  }
);

在上述代碼中,我們首先創(chuàng)建了一個axios實例并為其添加了響應攔截器,攔截器由兩部分組成:一個是處理正常響應的回調(diào),另一個是處理異常的回調(diào)。

當接口返回的業(yè)務狀態(tài)碼不是我們預定的成功狀態(tài)碼時,我們會在第一個回調(diào)函數(shù)中處理這種情況,通常,后端服務會返回一個包含業(yè)務錯誤信息的JSON對象,我們會彈出錯誤信息,并調(diào)用Promise.reject()來拒絕這個Promise,使得后續(xù)的.then()不會被執(zhí)行,而是直接跳轉(zhuǎn)到.catch()中去。

對于異常處理,我們檢查error.response是否存在來區(qū)分錯誤類型,如果error.response存在,說明請求已發(fā)出且服務器有響應,但狀態(tài)碼不是2xx,這時我們可以根據(jù)服務器返回的錯誤信息進行提示,如果不存在,可能是請求發(fā)出前發(fā)生了錯誤,例如網(wǎng)絡問題,或者是請求配置不正確。

特別需要注意的是,當token失效時,可能會在一次用戶操作中引發(fā)多個請求失敗,導致多次彈出錯誤提示,這會影響用戶體驗,為了解決這個問題,我們可以設置一個全局變量來控制提示只彈出一次。

let hasTokenErrorShown = false;
// 部分異常處理代碼
if (error.response && error.response.status === 401 && !hasTokenErrorShown) {
  hasTokenErrorShown = true;
  Message({
    message: 'Token expired, please login again',
    type: 'error',
    duration: 5 * 1000
  });
}

通過上述機制,我們不僅統(tǒng)一了錯誤處理的方式,而且避免了因為重復錯誤導致的頻繁提示,提升了用戶界面的友好性。

為了避免在攔截器中由于編程疏忽導致的問題,比如在響應攔截器中忘記返回response對象,我們需要仔細檢查攔截器的邏輯,確保任何情況下,use函數(shù)中的兩個回調(diào)都正確返回了Promise對象。

使用axios的攔截器可以有效地對HTTP請求進行監(jiān)控和管理,它為我們提供了一個強大的機制來處理API調(diào)用過程中可能出現(xiàn)的各種情況,從而增強應用的可維護性和用戶體驗。


新聞名稱:axios攔截響應報錯
標題路徑:http://www.5511xx.com/article/ccoddec.html