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日

相关文章

  • VSCode写vue项目一键生成.vue模版,修改定义其他模板的方法

    如果您想在VSCode中快速地生成.vue文件的模板代码,可以使用Vue VSCode Snippets插件。这个插件提供了一系列可以用于在Vue项目中快速生成模板代码的人性化代码片段,例如template、script等。不仅如此,这个插件还支持自定义模板,您可以修改定义对于其他模板的方法,以实现更加高效的开发。 下面是详细的操作过程: 安装Vue VSC…

    Vue 2023年5月28日
    00
  • Vue.js每天必学之指令系统与自定义指令

    Vue.js每天必学之指令系统与自定义指令 1. 什么是指令 在Vue.js中,指令是一种用于处理模板中特殊DOM属性的特殊语法。指令以 v- 前缀作为标识符,告诉模板编译器将该属性特殊处理。 指令可以用于动态地添加、更新和删除DOM元素。在对元素进行DOM操作的同时,指令还可以绑定Vue实例中的属性。 2. Vue指令列表 Vue提供了很多内置指令,这些内…

    Vue 2023年5月28日
    00
  • vue vant中picker组件的使用

    针对“vue vant中picker组件的使用”的完整攻略,我将分为以下几个部分进行讲解: picker组件的基本使用 picker组件的高级使用 两条示例说明 1. picker组件的基本使用 在vue vant中使用picker组件首先需要通过npm安装vant组件库: npm install vant -S 然后在需要使用picker组件的页面中导入v…

    Vue 2023年5月27日
    00
  • vue实现一个单文件组件的完整过程记录

    下面是“vue实现一个单文件组件的完整过程记录”的攻略: 什么是单文件组件? 单文件组件是Vue.js的一个重要概念。所谓单文件组件,就是一个Vue组件被封装在一个独立的文件中,包括组件所需的模板、CSS样式和JavaScript代码。单文件组件的扩展名通常为.vue,这个文件可以被其他Vue组件或Vue实例引用和渲染,从而将组件保持独立和可复用。 基本结构…

    Vue 2023年5月28日
    00
  • Vue 服务端渲染SSR示例详解

    下面是“Vue 服务端渲染SSR示例详解”的完整攻略。 Vue 服务端渲染SSR示例详解 什么是Vue 服务端渲染 在Web中,常用的前端框架可以分为两类:传统的客户端渲染(CSR)框架和服务端渲染(SSR)框架。传统的CSR框架(如Vue.js、React等)是指通过JavaScript动态地处理DOM元素的方式来渲染页面。而SSR框架是指在服务器端生成H…

    Vue 2023年5月28日
    00
  • Vue如何根据id在数组中取出数据

    当需要在 Vue 中根据 id 获取数组中的数据时,通常有以下两种方式: 1. 使用 find() 方法 find() 方法会返回数组中第一个满足指定条件的元素,如果找不到对应元素则返回 undefined。 假设我们有如下数据: data() { return { list: [ { id: 1, name: ‘apple’, price: 5.0 }, …

    Vue 2023年5月28日
    00
  • vue 中this.$set 动态绑定数据的案例讲解

    下面我将详细讲解“vue 中this.$set 动态绑定数据的案例讲解”的攻略。 什么是 this.$set 在 Vue 的数据绑定中,如果数据中的某个属性值是对象或数组,并且需要动态修改其中的某个属性,而且这个属性还需要双向绑定,那么 Vue 提供的双向绑定语法可能会失效。这时,就需要使用 this.$set 来动态绑定数据。 this.$set 是 Vu…

    Vue 2023年5月28日
    00
  • 关于vue项目部署后刷新网页报404错误解决

    针对题目“关于vue项目部署后刷新网页报404错误解决”的问题,我将给出完整攻略,并给出两个示例说明。 问题背景 在vue项目部署后,当在浏览器上进行刷新时,会出现404 Not Found错误,这是因为部署后的静态文件资源没有被正确地映射到服务器的URL路径上。 解决方法 部署vue项目后,需要在服务器端配置URL路径的映射规则,将浏览器请求的URL路径指…

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