详解axios中封装使用、拦截特定请求、判断所有请求加载完毕)

详解 axios 中封装使用、拦截特定请求、判断所有请求加载完毕

封装 Axios

Axios 是一款基于 Promise 的 HTTP 请求库,让我们在浏览器端和 Node.js 中发起 HTTP 请求变得非常容易。但是,为了更好的使用和维护,我们需要对 Axios 进行封装。

我们可以将 Axios 封装成一个单独的模块,该模块会创建一个新的 Axios 实例,设置默认配置,封装公共的请求逻辑和错误处理,然后将封装后的 Axios 实例导出。

以下是一个简单的封装示例:

import axios from 'axios'
import config from '@/config'

const request = axios.create({
  baseURL: config.baseURL,
  timeout: config.timeout,
  headers: {
    'Content-Type': 'application/json;charset=UTF-8'
  }
})

// 请求拦截器
request.interceptors.request.use(config => {
  // 在请求发送之前做些什么,例如加入 Token
  return config
}, error => {
  // 对请求错误做些什么
  return Promise.reject(error)
})

// 响应拦截器
request.interceptors.response.use(response => {
  // 对响应数据做些什么
  return response.data
}, error => {
  // 对响应错误做些什么
  return Promise.reject(error)
})

export default request

拦截特定请求

在开发中,我们经常会遇到需要拦截某些特定的请求,如请求超时、请求错误等。为了实现这些功能,Axios 提供了拦截器机制。

以下是针对请求超时和请求错误的特定请求拦截器示例:

import axios from 'axios'
import config from '@/config'

const request = axios.create({
  baseURL: config.baseURL,
  timeout: config.timeout,
  headers: {
    'Content-Type': 'application/json;charset=UTF-8'
  }
})

// 请求拦截器
request.interceptors.request.use(config => {
  // 在请求发送之前做些什么,例如加入 Token
  return config
}, error => {
  // 对请求错误做些什么
  return Promise.reject(error)
})

// 响应拦截器
request.interceptors.response.use(response => {
  // 对响应数据做些什么
  return response.data
}, error => {
  // 对响应错误做些什么
  if (error && error.response) {
    switch (error.response.status) {
      case 400:
        error.message = '请求错误'
        break
      case 401:
        error.message = '未授权,请登录'
        break
      case 403:
        error.message = '拒绝访问'
        break
      case 404:
        error.message = `请求地址出错: ${error.response.config.url}`
        break
      case 408:
        error.message = '请求超时'
        break
      case 500:
        error.message = '服务器内部错误'
        break
      case 501:
        error.message = '服务未实现'
        break
      case 502:
        error.message = '网关错误'
        break
      case 503:
        error.message = '服务不可用'
        break
      case 504:
        error.message = '网关超时'
        break
      case 505:
        error.message = 'HTTP版本不受支持'
        break
      default:
    }
  }
  return Promise.reject(error)
})

export default request

注意,在响应拦截器中,我们需要根据响应错误的状态码进行不同的错误处理。

判断所有请求加载完毕

当我们需要在所有的请求都加载完毕后执行某些操作时,可以使用 Axios 提供的并发处理机制。Axios 并发请求返回的是一个 Promise 数组,我们可以使用 Promise.all() 方法将这些 Promise 组合成一个 Promise,然后在 Promise.then() 方法中处理返回的结果。

以下是判断所有请求加载完毕的示例:

import axios from 'axios'
import config from '@/config'

const request = axios.create({
  baseURL: config.baseURL,
  timeout: config.timeout,
  headers: {
    'Content-Type': 'application/json;charset=UTF-8'
  }
})

// 请求拦截器
request.interceptors.request.use(config => {
  // 在请求发送之前做些什么,例如加入 Token
  return config
}, error => {
  // 对请求错误做些什么
  return Promise.reject(error)
})

// 响应拦截器
request.interceptors.response.use(response => {
  // 对响应数据做些什么
  return response.data
}, error => {
  // 对响应错误做些什么
  if (error && error.response) {
    switch (error.response.status) {
      case 400:
        error.message = '请求错误'
        break
      case 401:
        error.message = '未授权,请登录'
        break
      case 403:
        error.message = '拒绝访问'
        break
      case 404:
        error.message = `请求地址出错: ${error.response.config.url}`
        break
      case 408:
        error.message = '请求超时'
        break
      case 500:
        error.message = '服务器内部错误'
        break
      case 501:
        error.message = '服务未实现'
        break
      case 502:
        error.message = '网关错误'
        break
      case 503:
        error.message = '服务不可用'
        break
      case 504:
        error.message = '网关超时'
        break
      case 505:
        error.message = 'HTTP版本不受支持'
        break
      default:
    }
  }
  return Promise.reject(error)
})

// 并发处理多个请求
const requests = [
  request.get('/api/user'),
  request.get('/api/order'),
  request.get('/api/product')
]

Promise.all(requests).then(([user, order, product]) => {
  console.log(user, order, product)
}).catch(error => {
  console.log(error)
})

export default request

以上示例中,我们将三个不同的请求组成一个数组 requests,然后使用 Promise.all() 方法并发处理这些请求,当所有请求加载完毕后,会调用 Promise.then() 方法。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解axios中封装使用、拦截特定请求、判断所有请求加载完毕) - Python技术站

(0)
上一篇 2023年6月25日
下一篇 2023年6月25日

相关文章

  • 最新青龙面板2.10.2搭建+XDD-PLUS的保姆级教程

    最新青龙面板2.10.2搭建+XDD-PLUS的保姆级教程 介绍 青龙面板2.10.2是一款著名的网页版面板,可以管理各种客户端脚本、自动化工具。本教程将介绍如何在Ubuntu服务器上搭建青龙面板2.10.2,并添加XDD-PLUS的支持。 前置条件 Ubuntu服务器 超级管理员权限 nginx或者apache2服务器 步骤1:安装依赖 sudo apt …

    other 2023年6月27日
    00
  • PHP扩展Memcache分布式部署方案

    下面是关于“PHP扩展Memcache分布式部署方案”的完整攻略: 背景 在高并发的Web应用中,Memcached是一种常用的缓存存储方案。然而,随着应用规模的扩大,单个Memcached实例所能承载的请求压力也越来越大,因此需要进行分布式部署。 解决方案 Memcached本身提供分布式部署方案,称为“Memcached集群”,但其依赖于第三方库进行实现…

    other 2023年6月27日
    00
  • sqlalchemy源码分析之create_engine引擎的创建

    SQLAlchemy源码分析之create_engine引擎的创建 SQLAlchemy是一个流行的Python ORM框架,它提供了一种方便的方式来与关系型数据库进行交互。在SQLAlchemy中,create_engine函数用于创建数据库引擎。本文将详细讲解create_engine函数的源码分析,包括其参数和实现细节。 create_engine函数…

    other 2023年5月9日
    00
  • golang 接口嵌套实现复用的操作

    Golang 接口嵌套实现复用的操作攻略 在Golang中,接口嵌套是一种强大的技术,可以实现代码的复用和灵活性。通过接口嵌套,我们可以将多个接口组合在一起,形成一个新的接口,从而实现更高层次的抽象和复用。下面是详细的攻略,包括两个示例说明。 1. 定义接口 首先,我们需要定义一些接口,这些接口将被嵌套在其他接口中。接口定义使用type关键字,后面跟着int…

    other 2023年7月28日
    00
  • ntp服务和dns服务(week3_day3)–技术流ken

    以下是“NTP服务和DNS服务(Week3_Day3)–技术流Ken的完整攻略”的标准markdown格式文本,其中包含了两个示例说明: NTP服务和DNS NTP服务和DNS服务是计算机网络中的两个重要服务。本文将介绍NTP服务和DNS服务的概念、工作原理常见问题和两个示例说明。 1. NTP服务 NTP(Network Time Protocol)服务…

    other 2023年5月10日
    00
  • Android TabWidget切换卡的实现应用

    Android TabWidget切换卡的实现应用攻略 简介 Android TabWidget是一种常用的用户界面元素,用于实现多个选项卡之间的切换。本攻略将详细介绍如何在Android应用中实现TabWidget的使用。 步骤 步骤1:准备工作 在Android项目中,首先需要确保已经添加了TabWidget的依赖库。在项目的build.gradle文件…

    other 2023年9月7日
    00
  • CEF C++调用前端js方法展示传递过来的图片数据

    CEF C++调用前端js方法展示传递过来的图片数据 当我们需要在一个桌面应用程序中展示动态的图片数据时,通常情况下我们可以使用网络图片,但是如果需要展示本地的图片呢?这时候,我们可以使用 CEF (Chromium Embedded Framework) 以及前端的 JavaScript 技术来实现这一需求。 CEF 简介 CEF 是一个基于 Chromi…

    其他 2023年3月28日
    00
  • Android Kotlin全面详细类使用语法学习指南

    Android Kotlin全面详细类使用语法学习指南 本攻略旨在帮助Kotlin初学者快速了解Kotlin中类的相关语法以及应用场景,让你能够轻松写出优雅、简洁、易读的Kotlin代码。 类的基本语法 Kotlin中,类被定义为一种特殊的函数。类名通常采用Pascal命名法,即首字母大写。类可以包含构造函数、属性、函数等内容。以下是一个示例: class …

    other 2023年6月27日
    00
合作推广
合作推广
分享本页
返回顶部