Javascript Axios override,从数据响应中获取状态代码,而不是状态
我正在调用一个API,该API根据数据而不是响应代码定义状态代码:Javascript Axios override,从数据响应中获取状态代码,而不是状态,javascript,axios,Javascript,Axios,我正在调用一个API,该API根据数据而不是响应代码定义状态代码: { data: { statusCode: 422, message: "User's not found" }, status: 200 } 在我的axios get请求中,它是从状态而不是数据中获取状态代码 return axios.get(`${process.env.BASE_URL}/users`) .then(response => { consol
{
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,则应转到catch语句您可以使用
中的标准if
语句处理。然后()
在这种情况下,您可以拦截响应、检查数据并抛出自定义错误:
// 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)
})
检查response.data.statusCode
值,如果它是442
,则理想情况下应该抛出错误
,并让它在.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);
});
我认为问题来自后端,后端应该返回422状态码而不是200是的,我还认为后端应该正确处理状态码。但是有什么方法可以从数据响应的状态码中找到答案吗?老兄,你是我心目中的英雄!!:)那正是我想要的
// 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);
});
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);
});