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

yizhihongxing

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日

相关文章

  • Vue Render函数原理及代码实例解析

    Vue Render函数原理及代码实例解析 Render函数是Vue中非常重要的一个概念。对于Render函数的深入理解能够帮助我们更好地理解Vue的内部实现机制。本文将从以下几个方面介绍Vue Render函数的原理和代码实例。 什么是Render函数 Render函数是Vue模板编译之后生成的一个函数,负责将Vue实例渲染成一个虚拟DOM树,最终将虚拟D…

    Vue 2023年5月28日
    00
  • vue.js实现备忘录功能的方法

    下面我来详细讲解一下“vue.js实现备忘录功能的方法”的完整攻略。 1. 确定页面结构 首先需要在页面中确定备忘录的展示位置或容器。此处推荐使用<div>标签做为备忘录的容器,所有备忘录信息都将渲染到这个容器中。 <div id="memos"></div> 2. 创建数据模型 接下来要创建备忘录的数…

    Vue 2023年5月27日
    00
  • vue实现的微信机器人聊天功能案例【附源码下载】

    来讲解一下“vue实现的微信机器人聊天功能案例【附源码下载】”的完整攻略吧。 一、背景 微信机器人是近几年比较热门的技术之一,很多人会用机器人来完成一些简单的自动回答问题的功能。而使用Vue实现微信机器人聊天功能可以为我们提供一个更加简单、便利、美观的方式,同时也可以让我们更加深入的了解Vue框架的使用。 二、准备工作 为了实现该功能,我们需要做以下准备工作…

    Vue 2023年5月27日
    00
  • Vue3中Vuex的详细使用方法

    下面是Vue3中Vuex的详细使用方法攻略。 什么是Vuex Vuex是Vue.js中的状态管理模式,该模式中的核心是store(仓库),store包含着状态(state)、更新状态的方法(mutations)和响应状态变化的方法(actions)。Vuex能够集中处理共享状态的逻辑,方便进行状态的修改和管理。 Vuex的安装和配置 在Vue3项目中,安装和…

    Vue 2023年5月28日
    00
  • Vue3发送post请求出现400 Bad Request报错的解决办法

    以下是 “Vue3发送post请求出现400 Bad Request报错的解决办法” 的完整攻略: 问题描述 在使用 Vue3 进行 post 请求时,可能会遇到 400 Bad Request 错误,这通常是因为请求的数据格式或参数设置错误导致的。 解决方法 1. 设置请求头 可以尝试设置请求头中的 Content-Type 和 Accept 字段,确保发…

    Vue 2023年5月27日
    00
  • Vue 按照创建时间和当前时间显示操作(刚刚,几小时前,几天前)

    实现Vue按照创建时间和当前时间显示操作的方法可以使用moment.js库。该库可以帮助格式化日期和时间,并提供许多快捷选项。 以下是实现这一功能的完整攻略: 步骤1: 安装moment.js npm install moment –save 步骤2: 在Vue组件中导入moment.js库 import moment from ‘moment’; 步骤3…

    Vue 2023年5月28日
    00
  • vue路由插件之vue-route

    下面是针对“vue路由插件之vue-router”的完整攻略: 概述 Vue-Router 是 Vue.js 的官方路由插件,它能够快速构建 SPA(Single-Page Application)应用程序或更改原有的应用程序的路由。Vue-Router是一个与Vue.js 联系最紧密的框架,它的核心思想,就是把路由映射到组件。这个映射是双向的,因此,当一个…

    Vue 2023年5月28日
    00
  • NodeJS落地WebSocket实践前端架构师破局技术

    让我详细讲解一下“NodeJS落地WebSocket实践前端架构师破局技术”的完整攻略。 什么是WebSocket WebSocket是一种基于TCP协议的新型网络通信协议,它可以实现客户端和服务器端的双向通信,可以使得我们在Web应用中实现实时交互。WebSokcet协议比HTTP协议更加高效,具有延迟小、传输快、实时性好等优点,特别适合于实时通信和大数据…

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