实现axios全局响应拦截错误类型

介绍

在使用axios进行网络请求时,我们经常会遇到各种错误,比如网络错误、服务器错误等。为了方便统一处理这些错误,我们可以使用axios的拦截器功能,在全局范围内对错误进行拦截和处理。本文将向你介绍如何实现axios全局响应拦截错误类型。

1. 安装axios

首先,你需要在你的项目中安装axios。在终端中运行以下命令:

npm install axios

2. 创建axios实例

接下来,我们需要创建一个axios实例。通过创建实例,我们可以为不同的请求设置不同的配置,比如请求超时时间、请求头等。在代码中,我们通过调用axios.create()方法来创建一个实例,并设置一些公共配置。

import axios from 'axios';

const instance = axios.create({
  baseURL: ' // 设置请求的基础URL
  timeout: 5000, // 设置请求超时时间为5秒
  headers: {
    'Content-Type': 'application/json' // 设置请求头的Content-Type
  }
});

export default instance;

在上面的代码中,我们创建了一个名为instance的axios实例,设置了基础URL、请求超时时间和请求头。

3. 添加响应拦截器

接下来,我们需要添加一个响应拦截器,用于拦截服务器返回的错误响应。在拦截器中,我们可以对错误进行统一处理,比如弹出错误提示、重新登录等操作。

instance.interceptors.response.use(
  response => {
    // 对响应数据进行处理
    return response;
  },
  error => {
    // 对错误进行处理
    return Promise.reject(error);
  }
);

在上面的代码中,我们调用interceptors.response.use()方法,传入两个回调函数。第一个回调函数会在响应数据返回之前被调用,我们可以在其中对响应数据进行处理。第二个回调函数会在出现错误时被调用,我们可以在其中对错误进行处理。

4. 处理错误

在错误处理的回调函数中,我们可以根据错误的类型来进行不同的处理。比如,如果是网络错误,我们可以提示用户检查网络连接;如果是服务器错误,我们可以提示用户稍后再试。

下面是一个处理网络错误的例子:

instance.interceptors.response.use(
  response => {
    // 对响应数据进行处理
    return response;
  },
  error => {
    if (error.message === 'Network Error') {
      // 网络错误,提示用户检查网络连接
      console.error('网络错误,请检查网络连接');
    } else {
      // 其他错误,输出错误信息
      console.error(error.message);
    }
    return Promise.reject(error);
  }
);

在上面的代码中,我们通过判断error.message来确定错误的类型,如果是网络错误则输出提示信息,否则输出错误信息。

5. 使用axios发送请求

最后,我们可以使用instance来发送请求,并对返回的数据进行处理。

instance.get('/api/data')
  .then(response => {
    // 对返回的数据进行处理
    console.log(response.data);
  })
  .catch(error => {
    // 对错误进行处理
    console.error(error);
  });

在上面的代码中,我们使用instance.get()方法发送一个GET请求,并在then方法中对返回的数据进行处理,在catch方法中对错误进行处理。

总结

通过以上的步骤,我们成功地实现了axios全局响应拦截错误类型的功能。通过添加响应拦截器,我们可以统一处理服务器返回的错误,提高代码的复用性和可维护性。希望这篇文章对你有帮助,如果有任何问题,请随时提问。

journey
  title 实现axios全局响应拦截错误类型

  section 安装axios
    终端-->npm install axios: 安装axios

  section 创建axios实例
    代码-->import axios from 'axios': 导入axios
    代码-->const instance = axios.create({...}): 创建axios实例
    代码-->export default instance: 导出axios实例