[英]Can't Get Error Message From Axios Response in React Native
我正在使用 React Native 編寫移動應用程序。 在某些情況下,我需要發送一個發布請求並獲得包括錯誤部分的響應。 因此,對於某些特定輸入,API(我自己的)返回 409 和一條消息。 示例返回:
{
"status": 409,
"message": "E-mail is already exists!"
}
在這里,我想接收該消息並向用戶展示。 這是我嘗試過的:
UserService.signup({ fullName, email, username, password })
.then(response => {
this.setState({ signUp: true });
if (response.result) {
Toast.show(messages.successfulSignUp, {
backgroundColor: "green",
duration: Toast.durations.LONG,
position: Toast.positions.TOP
});
this.props.navigation.navigate("SignIn");
} else {
}
})
.catch(error => {
Toast.show(error.message, {
backgroundColor: "red",
duration: Toast.durations.LONG,
position: Toast.positions.TOP
});
this.setState({ signUp: false });
});
我嘗試error.message, error.response, error, error.data
鍵,但它總是說TypeError: undefined is not an object (evaluating 'error.message')
。 那么,如何從錯誤 object 中獲取消息?
編輯:這就是我發送請求的方式:
import { post } from "./api";
export default {
signup: ({ fullName, email, username, password }) => {
return post("/user/register", { fullName, email, username, password });
}
};
export const request = config => {
return new Promise((resolve, reject) => {
axiosInstance
.request({
url: config.url,
method: config.method || "get",
data: config.body,
headers: {
"Content-Type": "application/json",
"X-Auth-Token": store.getState().auth.token
}
})
.then(response => {
resolve(response.data);
})
.catch(error => {
reject(error.data);
});
});
};
export const post = (url, body = {}) => {
return request({
url,
body,
method: "post"
});
};
最后我解決了這個問題。 我不得不改變我的請求方法和我解決錯誤的方式:
export const request = (config) => {
return new Promise((resolve, reject) => {
axiosInstance.request({
url: config.url,
method: config.method || 'get',
data: config.body,
headers: {
'Content-Type': 'application/json',
'X-Auth-Token': store.getState().auth.token,
}
}).then(response => {
resolve(response.data)
}).catch(error => {
reject(error.response)
})
})
}
// This is how reach out to the error message:
console.log(error.data.message);
根據后端返回的內容,axios 中的錯誤消息位於錯誤 object 的response.data
中。
.catch(error => {
const errResponse = (error && error.response && error.response.data)
|| (error && error.message);
reject(errResponse);
});
Axios 已經返回 Promise
您的請求 function 應該是這樣的,
export const request = config => {
return axiosInstance.request({
url: config.url,
method: config.method || "get",
data: config.body,
headers: {
"Content-Type": "application/json",
"X-Auth-Token": store.getState().auth.token
}
});
};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.