详解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日

相关文章

  • jQuery lazyload 的重复加载错误以及修复方法

    下面是 “jQuery lazyload的重复加载错误以及修复方法” 的完整攻略。 什么是 jQuery lazyload jQuery lazyload是一款可延迟加载图片的jQuery插件。它可以帮助网页优化,当用户滚动页面时,不立即加载图片,而是在它们出现在浏览器视口内时才加载。这样可以减少页面加载时间并提高用户体验。 重复加载错误 在实现jQuery…

    other 2023年6月25日
    00
  • telnet安装

    Telnet安装 简介 Telnet 是一种网络协议,可用于远程登录到远程计算机或设备进行维护或操作。本文将介绍如何在 Linux 系统上安装和配置 Telnet。 安装 打开终端,使用以下命令安装 telnet: sudo apt-get install telnet 如果你已经安装了 telnet,则该命令将返回 “telnet已经是最新版”。 安装后,…

    其他 2023年3月28日
    00
  • app判断链接参数后缀跳转不同地址的方法

    当我们需要根据链接参数后缀来跳转到不同的地址时,可以使用以下方法: 首先,我们需要获取链接中的参数后缀。可以使用编程语言中的字符串处理函数或正则表达式来提取参数后缀。例如,在JavaScript中,可以使用window.location.search来获取链接中的查询字符串,然后使用字符串处理函数或正则表达式提取参数后缀。 接下来,我们可以使用条件语句(如i…

    other 2023年8月5日
    00
  • tg-net新一代万兆到桌面解决方案

    TG-NET新一代万兆到桌面解决方案攻略 TG-NET新一代万兆到桌面解决方案是一种高速网络传输方案,可以将万兆网络传输速度带到桌面级别。在本攻略中,我们将详细介绍如何实现TG-NET新一代万兆到桌面解决方案,包括硬件和软件的配置。 硬件配置 在实现TG-NET新一代万兆到桌面解决方案时,我们需要准备以下硬件: 一台支持万兆网卡的计算机 一根万兆网线 一台支…

    other 2023年5月8日
    00
  • cmd环境下载文件的几种方法

    以下是cmd环境下载文件的几种方法的完整攻略,包括两个示例说明。 1. cmd环境下载文件的方法 在cmd环境中下载文件,可以按照以下几种方法进行: 使用curl命令下载文件: bash curl -O [url] 其中,[url]是要下载的文件的URL地址。例如,要下载一个名为example.zip的文件,可以使用以下命令: bash curl -O ht…

    other 2023年5月9日
    00
  • IIS中查看W3P.exe进程对应的应用程序池的方法

    要查看IIS中W3P.exe进程对应的应用程序池,可以通过以下步骤进行操作: 打开“任务管理器”(Ctrl+Shift+Esc),切换到“详细信息”选项卡,找到W3P.exe进程。 右键点击W3P.exe进程,选择“打开文件位置”。 在弹出的文件夹中,找到“inetpub”文件夹(默认安装路径),进入“inetpub”文件夹,再进入“wwwroot”文件夹(…

    other 2023年6月25日
    00
  • json数据格式及json校验格式化工具简单实现

    json数据格式及json校验格式化工具简单实现 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于阅读和编写,并且易于机器解析和生成。在现代web应用程序开发中,JSON已经成为一种常用的数据格式。本文将介绍JSON数据格式,并提供一个简单的JSON校验、格式化工具的实现代码。 什么是JSON格式 JSON格式…

    其他 2023年3月28日
    00
  • 解析:继承ViewGroup后的子类如何重写onMeasure方法

    当我们继承自 ViewGroup 后,需要重写 onMeasure() 方法来计算并设置该布局的子 View 布局参数,在该方法中,会通过 MeasureSpec 来获取父布局传递的测量模式和大小值,我们需要根据这些值来确定子 View 的大小和位置。 下面是重写 onMeasure() 方法的步骤: 1.实现该方法 我们需要在子类中重写该方法并在其中编写测…

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