Axios覆盖,从数据响应中获取状态代码,而不是状态

时间:2019-02-10 08:19:02

标签: javascript axios

我正在调用一个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时应捕获语句

3 个答案:

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