我从后端代码发送状态代码422,其响应正文包含错误的描述。我正在使用axios post发布请求:
post: function(url, reqBody) {
const request = axios({
baseURL: config.apiUrl,
url: url,
headers: {
'Content-Type': 'application/json',
'Authorization': sessionStorage.getItem('token')
},
method: 'POST',
data: reqBody,
responseType: 'json'
});
return request
.then((res) => {
return res;
})
.catch((error) => {
console.log(error);
return error;
})
}
问题是当后端返回错误代码422时,我捕获的错误对象没有关于响应主体的信息。有什么方法可以检索错误文本吗?
答案 0 :(得分:7)
对于本机反应,它对我有用
api.METHOD('endPonit', body)
.then(response => {
//...
})
.catch (error => {
const errorMessage = JSON.parse(error.request.response)
console.log(errorMessage.message)
})
答案 1 :(得分:4)
我有同样的问题,答案(根据Axios> = 0.13)是专门检查error.response.data
:
axios({
...
}).then((response) => {
....
}).catch((error) => {
if( error.response ){
console.log(error.response.data); // => the response payload
}
});
有关详细信息,请参阅here。
答案 2 :(得分:4)
AXIOS错误响应的“主体”取决于请求所具有的响应类型。
如果您想了解有关此问题的完整详细信息,请参阅以下博客文章:How to catch the body of an error in AXIOS。
总而言之,AXIOS将根据错误返回3个不同的主体:
错误的请求,我们实际上在请求中做错了什么(缺少参数,格式错误),但实际上并未发送。发生这种情况时,我们可以使用error.message
访问信息。
axios.get('wrongSetup')
.then((response) => {})
.catch((error) => {
console.log(error.message);
})
网络请求错误:当我们尝试访问的服务器根本没有响应时,就会发生这种情况。这可能是由于服务器关闭或URL错误。
在这种情况下,我们可以使用error.request
访问请求的信息。
axios.get('network error')
.then((response) => {})
.catch((error) => {
console.log(error.request );
});
错误状态:这是最常见的请求。对于任何返回状态不同于200的请求,都可能发生这种情况。它可能是未经授权的,未找到的,内部错误等。发生此错误时,我们可以通过访问以下代码段中指定的参数来掌握请求的信息。对于数据(如上所述),我们需要访问error.response.data
。
axios.get('errorStatus')
.then((response) => {})
.catch((error) => {
console.log(error.response.data);
console.log(error.response.status);
console.log(error.response.headers);
})
答案 3 :(得分:1)
对于使用await / async和Typescript的用户
try {
const response = await axios.post(url, body)
} catch (error) {
console.log(error.response.data);
}
答案 4 :(得分:0)
我从后端返回一个字符串,但期望json作为响应类型。所以我需要为axios返回一个对象而不是字符串来正确处理它。