我正在调用一个API,该API从数据而不是响应代码中定义statusCode:
{
data: {
statusCode: 422,
message: "User's not found"
},
status: 200
}
在我的axios get请求中,它是从状态中获取状态代码,而不是从数据中获取。
return axios.get(`${process.env.BASE_URL}/users`)
.then(response => {
console.log(response);
}).catch(err => {
console.log(err.message);
});
我正在获取响应,但是应该是因为它是422。
我该如何引用数据响应的statusCode,以便它不为200时应捕获语句
答案 0 :(得分:1)
您可以在if
内使用标准的.then()
语句处理
return axios.get(`${process.env.BASE_URL}/users`)
.then(response => {
if(response.data.statusCode===442){
...//custom error handling goes here
}else{
...//if statusCode is a success one
}
}).catch(err => {
console.log(err.message);
});
答案 1 :(得分:0)
在这种情况下,您可以拦截响应,检查数据并引发自定义错误:
// Add a response interceptor
axios.interceptors.response.use(function(response) {
if (response.data && response.data.statusCode && !(response.data.statusCode >= 200 && response.data.statusCode < 300)) throw new Error()
return response;
}, function(error) {
return Promise.reject(error);
});
// Make a GET request
axios.get(url)
.then((data) => {
console.log('data', data)
})
.catch((e) => {
console.log('error', e)
})
通过这种方式配置axios实例,这样您就不必为应用程序中的每个请求重复自己的操作
此外,您可以使用以下代码覆盖状态。 但是由于状态验证已经执行,因此不会在错误的状态代码上引发错误
// Add a response interceptor
axios.interceptors.response.use(function(response) {
if (response.data && response.data.statusCode) response.status = response.data.statusCode
return response;
}, function(error) {
return Promise.reject(error);
});
答案 2 :(得分:0)
检查response.data.statusCode
的值,如果它是442
,则理想情况下应该抛出一个Error
,并在.catch
回调中对其进行处理。
return axios.get(`${process.env.BASE_URL}/users`)
.then(response => {
if(response.data.statusCode===442){
throw new Error(response.data.message); //using throw instead of Promise.reject() to break the control flow.
}else{
//return the data wrapped in promise
}
})
.catch((err) => {
console.log(err.message);
return Promise.reject(err.message);
});