axios如何处理错误状态码

Axios是一个常用的用于发送HTTP请求的库,它提供了一些处理错误状态码的方法。在请求过程中,服务器可能会返回不同的状态码,例如404表示资源未找到,500表示服务器内部错误等。为了能够正确处理这些错误状态码,我们可以使用Axios提供的错误处理机制。

错误处理机制

Axios提供了一个拦截器(interceptor)的概念,通过拦截器,我们可以在请求或响应被处理之前或之后执行一些操作。这里我们可以使用响应拦截器来处理错误状态码。

axios.interceptors.response.use(
  response => {
    // 请求成功,返回响应数据
    return response;
  },
  error => {
    // 请求发生错误,处理错误状态码
    if (error.response) {
      // 根据状态码进行处理
      switch (error.response.status) {
        case 404:
          // 处理404错误
          console.log("资源未找到");
          break;
        case 500:
          // 处理500错误
          console.log("服务器内部错误");
          break;
        default:
          // 处理其他错误
          console.log("发生错误");
          break;
      }
    } else {
      // 处理其他错误
      console.log("发生错误");
    }
    return Promise.reject(error);
  }
);

在上面的代码中,我们使用了axios.interceptors.response.use方法来设置响应拦截器。该方法接受两个参数,第一个参数是处理成功响应的函数,第二个参数是处理错误响应的函数。

在错误响应的处理函数中,我们首先判断error.response是否存在,如果存在则说明是服务器返回的错误响应。然后我们可以根据状态码做相应的处理。在这个例子中,我们只处理了404和500状态码,对于其他状态码,我们统一处理为"发生错误"。

在处理完错误之后,我们使用Promise.reject方法将错误继续向下传递,这样我们就可以在调用axios的地方使用.catch来捕获错误。

状态图

下面是一个简化的状态图,展示了请求和响应的流程以及可能的错误状态码。

stateDiagram
  [*] --> 请求发送
  请求发送 --> 服务器处理中
  服务器处理中 --> 请求成功 : 200
  服务器处理中 --> 资源未找到 : 404
  服务器处理中 --> 服务器内部错误 : 500
  请求成功 --> [*]
  资源未找到 --> [*]
  服务器内部错误 --> [*]

在上面的状态图中,我们可以看到请求的流程,以及可能的错误状态码。请求发送后,服务器处理中,然后根据状态码来决定请求成功还是发生了错误。

示例

下面是一个使用Axios发送GET请求并处理错误状态码的示例。

axios.get("/api/data")
  .then(response => {
    console.log(response.data);
  })
  .catch(error => {
    if (error.response) {
      switch (error.response.status) {
        case 404:
          console.log("资源未找到");
          break;
        case 500:
          console.log("服务器内部错误");
          break;
        default:
          console.log("发生错误");
          break;
      }
    } else {
      console.log("发生错误");
    }
  });

在上面的示例中,我们使用axios.get方法发送了一个GET请求,并处理了请求成功和错误状态码。如果请求成功,我们可以通过response.data来获取返回的数据;如果发生错误,我们会根据状态码来处理不同的错误情况。

总结

Axios提供了错误处理机制来处理错误状态码。通过拦截器的响应拦截器,我们可以在请求发生错误时进行相应的处理。通过使用状态码来判断错误类型,我们可以针对不同的错误情况进行不同的处理操作。在使用Axios时,我们可以根据实际情况来处理错误状态码,以提高应用程序的稳定性和用户体验。