簡體   English   中英

為什么在拋出錯誤時axios不返回API響應?

[英]Why axios doesnt return API response when error thrown?

我在redux-saga上使用React。

我有一個簡單的/GET請求。 但是,如果API拋出任何錯誤,例如400 bad request我將無法獲得我的API返回的響應。

示例- /getUsers返回400 bad request並返回"Your form is invalid" 我可以在網絡中看到它,它已正確返回。 但是,在我的try catch

catch((error) => console.log(error.message))

始終是Network Error 我不想向用戶顯示Network Error ,但是API返回了響應。

題:

如何獲得正確的API響應錯誤消息?

  • 請求功能:

     const getUsers = () => api.get(URL); 
  • axios實例

     const api = axios.create(); 
  • 傳奇函數(僅作為示例)

     try { yield call(getUsers); } catch(error) { yield put(getUsersFail(error.message)); } 

首先,我們必須從axios調用獲取響應並檢查其狀態。 如果拋出400錯誤,則將其捕獲。

try {
  const response = yield call(api.get, url)

  if (response.status >= 200 && response.status < 300) {
    yield put({ type.TYPE, response })
  } else {
    throw response
  }

} catch(error) {
   // API response error message
   yield put({type.TYPE_ERROR, error.message})
}

請嘗試這個:

try {
  const response = yield call(api.get, url)

  if (response.status >= 200 && response.status < 300) {
    yield put({ type.TYPE, response })
  } 
  else {
   throw new Error(JSON.stringify(response));
  }
} catch(error) {
    const errorMessage = error.response && error.response.error && error.response.error.message;
    const errorMessage2 = error.request;
    const errorMessage3 = error.message;
    const reportedError = errorMessage || errorMessage2 || errorMessage3;

    yield put({type.TYPE_ERROR, reportedError })
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM