为什么引发错误时axios不会返回API响应?

时间:2018-11-11 18:41:08

标签: javascript reactjs axios redux-saga

我在React中使用redux-saga。

我有一个简单的/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();
    
  • saga函数(仅作为示例)

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

2 个答案:

答案 0 :(得分:0)

我们必须首先从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})
}

答案 1 :(得分:0)

请尝试:

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 })
}