网络请求库-axios的入门指南

news2024/12/26 11:28:01

网络请求库axios-入门指南

  • 网络请求库-axios
    • 认识axios库
    • axios发送请求
    • axios基本使用
      • axios基本演练
      • 配置baseURL
      • axios创建实例
      • axios发送多个请求(了解)
    • axios请求和响应拦截器
    • axios请求封装(简洁)

网络请求库-axios

认识axios库

有了原生网络请求为什么还需要axios库

  • 虽然现代浏览器提供了原生的网络请求API,例如fetch ,XMLHttpRequest,但某些功能不完善, 需要自己封装,
  • 于是有了对原生网络请求封装的库axios库,对比下axios具有如下优势:
    • 支持所有现代浏览器和旧版浏览器:axios库提供了对浏览器兼容性支持。它使用了一种统一的方式来处理网络请求,不需要考虑底层实现差异 更强大和方便的功能:
    • axios封装了对Promise的支持,处理异步操作更方便。如拦截请求和响应、自动转换请求和响应数据、请求取消等。

Vue作者推荐:

在这里插入图片描述

axios库功能特点:

  • 在浏览器中发送XMLHttpRequests请求
  • 在node.js 中发送 http请求
  • 支持 Promise APl
  • 拦截请求和响应
  • 转换请求和响应数据
  • 等等

补充: axios名称的由来?

个人理解:

  • 没有具体的翻译
  • axios: ajax i/o system.

AI回答:

  • Axios这个名称来源于希腊词语"axios"(ἄξιος),意为"值得的"或"配得上的"。这个名称在英文中常用于表示尊贵、可信赖和高质量的概念。Axios库的创造者Matt
    Zabriskie通过选择“Axios”这个名称,来传达一种以优雅、可靠、高质量的方式处理网络请求的理念
  • "axios"这个名称既简短而易记

axios发送请求

支持多种请求方式:

最常用的是get和put两个请求

  • axios(config)
  • axios.request(config)
  • axios.get(url[, config])
  • axios.delete(url[, config])
  • axios.head(url[, config])
  • axios.post(url[, data[, config]])
  • axios.put(url[, data[, config]])
  • axios.patch(url[, data[, config]]

有时候,我们可能需求同时发送两个请求

  • 使用axios.all,可以放入多个请求的数组.
  • axios.all([])返回的结果是一个数组,使用axios.spread 可将数组[res1,res2]展开为res1, res2

常见的配置选项:

在这里插入图片描述

axios基本使用

axios基本演练

1.安装axios

npm install axios

2.在需要发送网络请求的地方使用axios就可以发送网络请求:

由于开发中最常用的是get和post请求, 下面主要演示get和post请求的使用:

(1)通过request发送get请求:

import axios from 'axios'

// request函数返回一个Promise, 当请求有结果, 内部会自动调用resolve
axios.request({
// 配置请求url地址
url: "http://123.207.32.32:8000/home/multidata",
// 配置请求方式, 不写默认也是get请求
method: "get"
}).then(res => {
// 直接拿到结果是axios默认给我们返回的配置对象
// 如果想单纯拿到服务器的数据需要 .date
console.log(res.data)
})

(2)通过request发送post请求:

import axios from 'axios'

axios.request({
url: "http://123.207.32.32:1888/02_param/postjson",
method: "post",
// 传入请求体
data: {
 name: "sevgilid",
 password: "aaa123"
}
}).then(res => {
console.log(res.data)
})

(3)通过get函数直接发送get请求

import axios from 'axios'

// get函数传入两个参数, 参数1: url地址, 参数2: 配置信息
axios.get("http://123.207.32.32:9001/lyric", {
// 传入查询字符串
params: { id: 500665346 }
}).then(res => {import axios from 'axios'

// post函数传入三个参数, 第一个url, 第二个请求体, 第三个配置信息
axios.post("http://123.207.32.32:1888/02_param/postjson", {
name: "kaisa",
password: "aaa123"
}).then(res => {
console.log(res.data)
})
console.log(res.data)
})

(4)通过post函数发送post请求

import axios from 'axios'

// post函数传入三个参数, 第一个url, 第二个请求体, 第三个配置信息
axios.post("http://123.207.32.32:1888/02_param/postjson", {
name: "kaisa",
password: "aaa123"
}).then(res => {
console.log(res.data)
})

配置baseURL

我们来看如下例子:

在开发中我们请求的url地址其实前面都是相同的, 只是后面一部分不相同, 如下:

  • 请求地址1: http://123.456.23.23:8000/home/multidata
  • 请求地址2: http://123.456.23.23:8000/home/data
  • 请求地址3: http://123.456.23.23:8000/about/data

在每次网络请求时, 都写一遍是非常繁琐的, 我们可以通过baseURL将相同的地址抽离出去

import axios from 'axios'

// 1.抽离到baseURL变量中
const baseURL = "http://123.207.32.32:8000"

// 给axios实例配置公共的基础配置
// 2.配置公共的请求地址baseURL
axios.defaults.baseURL = baseURL
// 补充: 此外还可以配置公共的 超时时间... 等等
axios.defaults.timeout = 10000

// 此时发生请求就不需要传入完整的url
axios.get("/home/multidata").then(res => {
console.log(res.data)
})

axios创建实例

我们导入的axios就是默认axios的实例, 既然有了默认的实例为什么要创建axios的实例呢?

一般不会用默认实例,而是为每一个url创建一个实例,不同的url对应不同的实例

  • 当我们从axios模块中导入对象时, 使用的实例是默认的实例;当给该实例设置一些默认配置时, 这些配置就被固定下来了.

  • 但是后续开发中, 某些配置可能会不太一样, 比如某些请求需要使用特定的baseURL或者timeout等.

  • 这个时候, 我们就可以创建新的实例, 并且传入属于当前实例的配置信息.

  • 好处:如果有多个不相同的配置, 我们可以创建多个实例单独为每个实例进行配置, 当需要哪一个实例, 就调用哪一个实例, 实例之间的配置信息互不影响

// axios创建实例好处:
        // -如与多个服务器进行沟通,不止一个实例
        // -实例设置一些默认配置时, 这些配置就被固定;如timeout这些
// crete函数创建axios实例
const instance1 = axios.create({
    // 创建axios实例可以进行公共的配置信息, 且这些配置只针对当前实例
    baseURL: "http://123.207.32.32:9001",
    timeout: 6000,
    headers: {}
  })
  
  // 当baseURL的请求地址不一样时, 可以再创建一个实例
  const instance2 = axios.create({
    baseURL: "http://123.207.32.32:8000",
    timeout: 10000
  })
  
  // 实例1发送网络请求
  instance1.get("/lyric", {
    params: {
      id: 500665346
    }
  }).then(res => {
    console.log(res.data)
  })
  
  // 实例2发送网络请求
  instance2.get("/home/multidata").then(res => {
    console.log(res.data)
  })

axios发送多个请求(了解)

  • 使用axios.all, 可以放入多个请求的数组;
  • axios.all([]) 返回的结果是一个数组,使用 axios.spread 可将数组 [res1,res2] 展开为 res1, res2;
  • 当数组中的请求都有结果是时,才会返回结果;
import axios from 'axios'

// 同时发生多个网络请求
axios.all([
axios.get("/home/multidata"),
axios.get("http://123.207.32.32:9001/lyric?id=500665346")
]).then(res => {
console.log(res)
})

axios请求和响应拦截器

axios的也可以设置拦截器, :拦截每次请求和响应

1.请求拦截格式: axios.interceptors.request.use(请求成功回调拦截, 请求失败回调拦截)

  • 会将配置信息config传给回调函数, 我们可以通过config修改当次请求的配置信息, 修改完成后我们需要将返回return config
  • 请求失败拦截, 会将错误信息err传给回调函数
import axios from 'axios'

axios.interceptors.request.use((config) => {
console.log("请求成功的拦截, 可以通过config修改配置信息")
// 修改了配置信息需要再将配置信息返回出去
return config
}, (err) => {
console.log("请求失败的拦截")
return err
})

2.响应拦截格式: axios.interceptors.response.use(响应成功回调拦截, 响应失败回调拦截)

  • 响应成功拦截, 会将请求成功的数据传给成功的回调函数
  • 我们前面说过axios的请求结果, 会默认会返回一个配置对象, 响应拿到服务器的数据需要 .data 才可以获取, 其实这一转换操作, 我们可以在响应拦截中完成

3.请求和响应拦截常见操作

  • 请求拦截的成功拦截中:一般会修改一些配置信息,如header,认证登录的token/cookie,转化某些参数再返回;开始loading加载动画
  • 响应拦截的成功拦截中:结束拦截动画;拿到服务器数据转化(res.data)这样

axios请求封装(简洁)

axios非常好用, 当我们在多个组件中需要发生网络请求的时候, 多个组件都需要导入axios实例, 再通过axios实例发送网络请求

  • 这样的用法是没有问题的。那么我们为什么还要对axios进行封装呢?

    • 但是axios毕竟是一个第三方的库, 不是官方维护的, 如果有一天axios不再进行维护了, 我们项目中使用axios的地方都需要重构, 这个工程量是非常大的, 修改起来也非常不方便。

    • 那么解决方案是: 我们使用axios封装一个自己的request函数, 当axios真的不再维护, 我们修改代码时, 只需要修改自己封装的函数即可, 这样重构代码会非常简单

封装源码:

import axios from 'axios'

class MyRequest {
  constructor(baseURL, timeout=10000) {
    this.instance = axios.create({
      baseURL,
      timeout
    })
  }
//使用this来指向当前创建的实例对象
//1.封装request
  request(config) {
   // 返回一个Promise, 对数据转换
    return new Promise((resolve, reject) => {
      this.instance.request(config).then(res => {
        resolve(res.data)
      }).catch(err => {
        reject(err)
      })
    })
  }
//2.封装get
  get(config) {
    return this.request({ ...config, method: "get" })
  }
  
//3.封装post
  post(config) {
    return this.request({ ...config, method: "post" })
  }
//后面也可以在这里创建更多的方法,方式是差不多的
}

export default new MyRequest()
//这里导出的是一个实例对象,然后你也可以创建多个实例对象导出去,这个就是比较简单了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/704916.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用 Maya Mari 设计 3D 波斯风格道具(p2)

今天瑞云渲染小编给大家带来了Simin Farrokh Ahmadi 分享的Persian Afternoon 项目过程,解释了 Maya 和 Mari 中的建模、纹理和照明过程。由于篇幅较长,分上下两篇来分别阐述。接着会继续讲述Persian Afternoon 项目过程的纹理和灯光渲染方面内容。 纹理…

Apikit 自学日记:安装、使用浏览器插件测试

Apikit 研发管理和自动化测试产品中,提供了多种发起 API 测试的方式: 服务器测试:通过 Apikit 官方远程服务器发送请求,不需要安装任何插件,但是无法访问本地服务器(localhost)、内网、局域网。 插件测试:…

linux创建软链接

目录 软链接的作用创建软链接删除软链接修改链接 软链接的作用 就如同电影里演的一样,为保护价值昂贵的钻石,做一个和真正的钻石一模一样的假钻石来掩人耳目,假钻石的信息和真的一模一样,看到假的钻石就如同看到真的一样。Linux中…

《基于AidLux的自动驾驶智能预警应用方案》

YOLOP模型转ONNX ONNX是开放式神经网络(Open Neural Network Exchange)的简称,ONNX的规范及代码主要由微软,亚马逊,Facebook和IBM等公司共同开发,以开放源代码的方式托管在Github上。目前官方支持加载ONNX模型的框架有&#xff1…

记录实现QT和qml model/view 交互时候遇到的坑

使用QT的model/view 建立全局静态变量 打印发现有值输出 但是界面无日志显示 原因是一开始使用调用函数传参传的logModel参数加了const参数修饰 这个错误太傻了,找了半天一直怀疑外部类的问题 其实setContextProperty是这么用的 传QObject类型的引用之后它内部会…

【无标题】下载redis工具RESP.app(RedisDesktopManager)

1、安装前提: Windows: 1、Install Microsoft Visual C 2015-2019 x64 (If you have not already). 2、Download Windows Installer from http://redisdesktop.com/download. (Requires subscription)指导手册地址: https://docs.resp.app/…

DataSecurity Plus金融行业案例

摘要:DataSecurity Plus是一款强大的数据安全解决方案,为金融机构提供全面的数据保护和合规性监控。本文将介绍DataSecurity Plus在金融行业的使用案例,包括文件审计、数据分类和合规性报告等功能的应用。 DataSecurity Plus 文件审计&#…

《The book of why》读书笔记 -- introduction:mind over data

最近在浅学causal learning,拜读《The Book of Why》,记录一些笔记,下为书的introduction部分 下面这段话我觉得写得非常好 This book tells the story of a science that has changed the way we distinguish facts from fiction and yet ha…

性能测试如何做?资深10年测试带你揭秘,测试之路进阶...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 在做功能测试、自…

医学访问学者面试技巧注意

医学访问学者面试是获得进一步学术发展和研究机会的重要环节。在面试过程中,准备充分并注意一些关键技巧可以帮助你增加成功的机会。以下是知识人网小编整理的一些建议和技巧,希望对你在医学访问学者面试中取得好成绩有所帮助。 1. 提前了解研究机构&…

LeetCode——找出中枢整数

一、题目 2485. 找出中枢整数 - 力扣(Leetcode) 给你一个正整数 n ,找出满足下述条件的 中枢整数 x : 1 和 x 之间的所有元素之和等于 x 和 n 之间所有元素之和。 返回中枢整数 x 。如果不存在中枢整数,则返回 -1 …

统一移动门户对政企级办公来说有哪些优势?

政府机构和企业在数字化转型后,内部常使用多套不同的信息系统和应用程序。然而,这些系统和应用之间存在信息和数据隔离的问题,导致内部员工需要频繁切换登录,并容易出现信息遗漏和处理延误。这不仅妨碍了工作效率的提升&#xff0…

QML Canvas 裁剪

作者: 一去、二三里 个人微信号: iwaleon 微信公众号: 高效程序员 在 QML 开发中,Canvas 是一个很强大的绘图元素,可以实现各种复杂的图形效果,其中一个重要的特性就是裁剪。它的原理是使用路径或其他形状定义一个封闭区域,将绘图操作限制在该区域内,并隐藏掉超出该区域…

[k8s] arm64架构下k8s部署的坑

本次测试在华为kunpeng-920机器上,cpu配置如下: [rootmaster ~]# lscpu 架构: aarch64 CPU 运行模式: 64-bit 字节序: Little Endian CPU: …

软考--操作系统之文件系统多级索引

目录 概念索引结构索引表索引方式一级索引多级索引 真题分析题目1-存储文件最大长度解析题目2-多级索引占用物理块号解析题目3-综合解析总结 概念 索引结构 一个文件的信息存放在若干不连续物理块中 系统为每个文件建立一个专用数据结构——索引表,并将这些物理块…

快速部署K8s仪表板,助力管理轻松搞定!

https://kubernetes.io/zh-cn/docs/tasks/access-application-cluster/web-ui-dashboard/ Dashboard 是基于网页的 Kubernetes 用户界面。 你可以使用 Dashboard 将容器应用部署到 Kubernetes 集群中,也可以对容器应用排错,还能管理集群资源。 你可以使…

【运维工程师学习三】Linux中Shell脚本编写

【运维工程师学习三】shell编程 Shell程序分类1、系统中sh命令是bash的软链接2、Shell脚本标准格式之文件后缀3、Shell脚本标准格式之文件内容首行4、Shell脚本的运行方法一、作为可执行程序解释 二、作为解释器(bash)参数 5、find、grep、xargs、sort、…

C++ 中的字符串类

历史遗留问题 C 语言不支持真正意义上的字符串 C 语言用字符数组和一组函数实现字符串操作 C 语言不支持自定义类型,因此无法获得字符串类型 解决方案 从 C 到 C 的进化过程引入了自定义类型 在 C 中可以通过类完成字符串类型的定义 问题: C 中的…

华为云CodeArts实践初体验活动即将结束,抓紧报名,赢华为耳机!

【活动简介】 CodeArts是华为自研一站式软件开发生产线,软件开发全流程覆盖:支持需求管理、代码托管、流水线、代码检查、编译构建、部署、测试、制品仓库等全生命周期软件开发服务;开箱即用,云上开发。本次实践体验活动带你初步…

项目——学生信息管理系统4

目录 学生模块的功能实现 1. 创建Student实体类型 编写StudentDao 提供添加学生的方法 创建 学生添加页面 创建 AddStudentFrm 页面 注意创建成JInternalFrame类型 注意:把main方法注释掉 回到 MainFrm.java 页面 给添加学生按钮绑定事件 当打开 AddStudentF…