我在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));
}
答案 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 })
}