axios对请求各种异常情况处理的封装方法

Axios是一个流行的HTTP请求库,可用于从浏览器或Node.js中发起请求。它可以非常方便地对请求异常情况进行处理。

以下是对Axios进行请求异常处理的封装方法的攻略:

设置默认配置

可以设置axios的默认配置,包括baseURL、timeout等。这样可以封装通用配置,减少代码重复。

import axios from 'axios';

const axiosInstance = axios.create({
  baseURL: process.env.BASE_URL,
  timeout: 5000,
});

export default axiosInstance;

处理异常情况

在Axios中可以使用拦截器处理请求和响应的异常情况。

请求拦截器

可以在请求发送前添加拦截器,对请求进行处理,例如添加请求头、处理请求参数等。

axiosInstance.interceptors.request.use(
  (config) => {
    // 添加请求头
    config.headers.Authorization = `Bearer ${localStorage.getItem('token')}`;
    return config;
  },
  (error) => {
    return Promise.reject(error);
  }
);

响应拦截器

可以在响应返回后添加拦截器,对响应进行处理,例如处理响应数据、统一处理错误信息等。

axiosInstance.interceptors.response.use(
  (response) => {
    // 处理响应数据
    const { code, data, message } = response.data;

    if (code === 200) {
      return data;
    } else {
      // 统一处理错误信息
      message.error(message);
      return Promise.reject(message);
    }
  },
  (error) => {
    // 处理服务器错误
    if ((error.message.indexOf('timeout') !== -1) || (error.response && error.response.status === 504)) {
      message.error('请求超时!');
      return Promise.reject(error);
    }
    if (error.response.status === 401) {
      message.error('您没有权限访问该页面,请先登录!');
      return Promise.reject(error);
    }
    if (error.response.status === 403) {
      message.error('您没有权限访问该页面!');
      return Promise.reject(error);
    }
    if (error.response.status === 404) {
      message.error('您访问的页面不存在!');
      return Promise.reject(error);
    }
    if (error.response.status === 500) {
      message.error('服务器出错!');
      return Promise.reject(error);
    }
    message.error('网络错误!');
    return Promise.reject(error);
  }
);

示例

这里给出两个使用Axios处理请求异常情况的示例:

示例1:请求超时

const axiosInstance = axios.create({
  baseURL: process.env.BASE_URL,
  timeout: 5000,
});

axiosInstance.interceptors.response.use(
  (response) => {
    return response;
  },
  (error) => {
    if ((error.message.indexOf('timeout') !== -1) || (error.response && error.response.status === 504)) {
      message.error('请求超时!');
      return Promise.reject(error);
    }
    return Promise.reject(error);
  }
);

axiosInstance.get('/api/data').then((response) => {
    console.log(response);
}).catch((error) => {
    console.log(error);
});

示例2:处理服务器错误

const axiosInstance = axios.create({
  baseURL: process.env.BASE_URL,
});

axiosInstance.interceptors.response.use(
  (response) => {
    return response;
  },
  (error) => {
    if (error.response.status === 500) {
      message.error('服务器出错!');
      return Promise.reject(error);
    }
    return Promise.reject(error);
  }
);

axiosInstance.post('/api/data', {
    username: 'admin',
    password: '123456',
}).then((response) => {
    console.log(response);
}).catch((error) => {
    console.log(error);
});

以上就是Axios请求异常情况处理的封装方法攻略,可以根据实际需要对Axios进行不同的封装处理。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:axios对请求各种异常情况处理的封装方法 - Python技术站

(0)
上一篇 2023年5月28日
下一篇 2023年5月28日

相关文章

  • axios如何取消重复无用的请求详解

    当我们使用 axios 发送请求时,可能会出现多次发送同样的请求,这种情况可能会降低我们应用的性能。因此我们需要控制请求的发送,以避免重复无用的请求。 使用 axios 取消请求有 3 种方式: 使用 CancelToken 取消请求。 const CancelToken = axios.CancelToken; let cancel; axios.get(…

    Vue 2023年5月28日
    00
  • vue之延时刷新实例

    关于“vue之延时刷新实例”,可以采用Vue提供的$nextTick()函数来实现。 什么是$nextTick()? $nextTick()是Vue提供的一种异步更新DOM的方法,因为Vue是响应式的视图层框架,所以只有当数据更新后才能更新DOM,而有时候我们需要等到DOM更新后再进行一些操作,这时候我们就可以使用$nextTick()。 如何使用$next…

    Vue 2023年5月29日
    00
  • 在Vue中使用Avue、配置过程及实际应用小结

    在Vue中使用Avue Avue是一款基于Vue和Element-UI的UI框架,提供了诸如表单验证、表格显示、图表展示等丰富的组件和模板,能够大大简化前端开发人员的开发工作。 配置过程 安装Avue 在项目根目录下使用终端输入以下命令安装Avue: npm install avue-cli –save-dev 添加依赖 在main.js中添加以下代码引入…

    Vue 2023年5月27日
    00
  • Vue中slot的使用详解

    关于“Vue中slot的使用详解”的攻略,我会从以下几个方面进行讲解: slot的概念 默认slot 具名slot 作用域插槽 示例说明 slot的概念 slot是Vue组件中的一种分发内容的方式,可以帮助我们更方便地对组件进行布局和样式的控制。 在使用slot的时候,我们需要在组件中定义一个或多个插槽(slot),然后在使用该组件的时候,可以将子组件中的内…

    Vue 2023年5月27日
    00
  • Vue.js中让人容易忽略的API详解

    Vue.js中让人容易忽略的API详解可以涉及很多方面,我就从以下几个方面进行详细讲解。 一、computed computed是Vue.js中的一个属性,它主要用来设置计算属性。和methods相比,computed具有缓存的作用,只有当该属性的依赖发生变化时才会重新计算值。computed属性的值是根据它所依赖的其他属性变化而变化的,这样就能很方便地实现…

    Vue 2023年5月28日
    00
  • 详解Vue的七种传值方式

    详解Vue的七种传值方式 在Vue中,数据传递是开发中不可避免的问题,而Vue又提供了多种传值方式,方便我们进行数据的双向绑定和组件之间的交互。本文将详细介绍Vue的七种传值方式,并通过示例代码让你了解它们的使用方法及各自的优缺点。 父组件向子组件传值 1. props 最常见的方式就是通过props向子组件传值。使用该方式,父组件可以将需要传递的数据作为p…

    Vue 2023年5月28日
    00
  • vue实现点击按钮倒计时

    下面我就为你讲解“Vue实现点击按钮倒计时”的完整攻略。 前置知识:Vue的生命周期函数 实现倒计时需要对Vue的生命周期函数有一定的了解。常用的生命周期函数有 beforeCreate, created, beforeMount, mounted, beforeUpdate, updated, beforeDestroy, destroyed。其中,mou…

    Vue 2023年5月29日
    00
  • Vue动态表单的应用详解

    下面是关于“Vue动态表单的应用详解”的完整攻略。 简介 Vue动态表单的应用指的是根据不同的数据进行表单渲染,并可以根据用户的不同操作对表单进行相应的变动。这种技术通常被应用于一些需要根据不同的业务场景生成不同表单的场合,例如表单生成器、问卷调查等。 实现方法 实现 Vue 动态表单的关键在于动态渲染表单,引入 element-ui 的动态表单是实现这个功…

    Vue 2023年5月28日
    00
合作推广
合作推广
分享本页
返回顶部