1、是什么?

axios 它的底层是用了 XMLHttpRequest(xhr)方式发送请求和接收响应,xhr 相对于之前讲过的 fetch api 来说,功能更强大,但由于是比较老的 api,不支持 Promise,axios 对 xhr 进行了封装,使之支持 Promise,并提供了对请求、响应的统一拦截功能

2、能干啥?

axios可以用于从浏览器和Node.js应用程序中发送HTTP请求和接收响应数据。它可以用于以下操作:

  • 发送GET,POST,PUT,DELETE等HTTP请求
  • 检查HTTP响应状态码以确定请求是否成功或失败
  • 获取HTTP响应体中的数据
  • 将响应数据转换为JSON格式的数据
  • 检查HTTP请求和响应的头信息和身份验证
  • 发送JSON格式的数据作为HTTP请求体

除此之外,axios还提供了一些其他功能,例如:

  • 设置请求头信息
  • 设置响应体的格式和编码方式
  • 发送JSON格式的数据作为URL参数
  • 将HTTP请求和响应的详细信息记录到日志中
  • 支持Promise和async/await的异步编程风格

总之,axios是一个非常强大和灵活的HTTP库,可用于各种不同的应用程序和场景。

3、怎么玩?

安装

npm install axios -S

导入

import axios from 'axios'

4、方法

请求 备注
axios.get(url[config]) GET请求
axios.delete(url[config]) DELETE请求
axios.head(url[config]) HEAD请求
axios.options(url[config]) OPTIONS请求
axios.post(url[data[config]]) POST请求
axios.put(url[data[config]]) PUT请求
axios.patch(url[data[config]]) PATCH请求
  • config : 选项配置。例如:查询参数,请求头...
  • data : 请求体数据。最常见的是json格式数据
  • get、head : 这两种请求无法携带请求体
  • options、delete : 请求可以通过config中的data携带请求体

5、实战

异步

async fetchData() {
axios.get('/api/user/list').then((res) => {
console.log(res.data)
})
}

同步

async fetchData() {
const resp = await axios.get('/api/user/list')
console.log(resp)
}

发送查询参数,携带请求头数据

async fetchData() {
const resp = await axios.post(
'/api/postHeader',
{},
{
headers: {
Authorization: 'token',
},
}
)
console.log(resp)
}

发送查询参数,特殊字符手动解析

async fetchData() {
const name = encodeURIComponent('&&&')
const age = 21
const res = await axios.get(
`/api/getParams?name=${name}&age=${age}`
)
console.log(res.data)
}

发送查询参数,特殊字符自动解析

async fetchData() {
const res = await axios.get('/api/getParams', {
params: {
name: '&&&',
age: 20,
},
})
console.log(res.data)
}

使用请求体发送数据,格式为urlencoded

async fetchData() {
const params = new URLSearchParams()
params.append('name', 'zs')
params.append('age', 20)
const res = await axios.post('/api/getParamsPost', params)
console.log(res.data)
}

使用请求体发送数据,格式为multipart

async fetchData() {
const params = new FormData()
params.append('name', 'ly')
params.append('age', 25)
const res = await axios.post('/api/getParamsPost', params)
console.log(res.data)
}

使用请求体发送数据,格式为JSON

// JSON.stringify()
async fetchData() {
const o = {
name: '&&&',
age: 20,
}
const res = await axios.post('/api/getJSONPost', o)
console.log(res.data)
}

6、自定义axios实例

前面我们使用的是axios的默认配置项

下面我们手动创建axios实例,并指定相关配置项,覆盖默认的配置项

const _axios = axios.create(config)

config配置项如下

名称 含义
baseUrl 将自动加载url前面
headers 请求头,类型为简单对象
params 跟在url后面的参数,类型为简单的对象或URLSearchParams
data 请求体,类型有简单对象、FromData、URLSearchParams、File等
withCredentials 跨域时是否携带Cookie等凭证,默认为false
responseType 响应类型,默认为json
const _axios = axios.create({
baseURL:'/api',
headers:{}
});
const res = _axios.get("/students", {
name: 'zs',
age: 19
});
console.log(res)

6、axios的拦截器

请求拦截器

const _axios = axios.create({
baseURL: '/api',
headers: {}
}); _axios.interceptors.request.use(
// 请求正常执行的函数
config => {
config.headers={
Authorization:'x.y.z'
}
return config;
},
// 请求异常执行的函数
error => {
return Promise.reject(error)
}
)

响应拦截器

_axios.interceptors.response.use(
// 响应正常执行的函数
resp => { return resp
},
// 响应异常执行的函数
error => {
if(error.response.status === 401){
console.log("aaaa")
return Promise.resolve(400); // 处理异常
}
// ......
return Promise.reject(error)
}
)

7、抽取通用的axios配置

import axios from 'axios'
const _axios = axios.create({
// baseURL: 'http://localhost:8080',
withCredentials: true
}); // 9. 拦截器
_axios.interceptors.request.use(
function (config) {
// 比如在这里添加统一的 headers
config.headers = {
Authorization: 'aaa.bbb.ccc'
}
return config;
},
function (error) {
return Promise.reject(error);
}
); _axios.interceptors.response.use(
function (response) {
// 2xx 范围内走这里
return response;
},
function (error) {
if (error.response?.status === 400) {
console.log('请求参数不正确');
return Promise.resolve(400);
} else if (error.response?.status === 401) {
console.log('跳转至登录页面');
return Promise.resolve(401);
} else if (error.response?.status === 404) {
console.log('资源未找到');
return Promise.resolve(404);
}
// 超出 2xx, 比如 4xx, 5xx 走这里
return Promise.reject(error);
}
); export default _axios;

这样在其他需要使用的地方直接import即可

使用axios发送请求的几种方式的更多相关文章

  1. java web前端发送请求的4种方式

    表单 action, 链接href,js 绑定按钮 ajax绑定标签 <h1>通过表单提交参数</h1> <form action="/day46_v1/Ser ...

  2. httpclient发送请求的几种方式

    package asi; import org.apache.http.HttpEntity; import org.apache.http.client.config.RequestConfig; ...

  3. C#中Post请求的两种方式发送参数链和Body的

    POST请求 有两种方式 一种是组装key=value这种参数对的方式 一种是直接把一个字符串发送过去 作为body的方式 我们在postman中可以看到 sfdsafd sdfsdfds publi ...

  4. Vue项目中使用Vuex + axios发送请求

    本文是受多篇类似博文的影响写成的,内容也大致相同.无意抄袭,只是为了总结出一份自己的经验. 一直以来,在使用Vue进行开发时,每当涉及到前后端交互都是在每个函数中单独的写代码,这样一来加大了工作量,二 ...

  5. 第二节:SSL证书的申请、配置(IIS通用)及跳转Https请求的两种方式

    一. 相关概念介绍 1. SSL证书服务 SSL证书服务由"服务商"联合多家国内外数字证书管理和颁发的权威机构.在xx云平台上直接提供的服务器数字证书.您可以在阿里云.腾讯云等平台 ...

  6. Spring MVC中forward请求转发2种方式(带参数)

    Spring MVC中forward请求转发2种方式(带参数) http://www.51gjie.com/javaweb/956.html  

  7. 解决 SharePoint 2010 拒绝访问爬网内容源错误的小技巧(禁用环回请求的两种方式)

    这里有一条解决在SharePoint 2010搜索爬网时遇到的“拒绝访问错误”的小技巧. 首先要检查默认内容访问帐户是否具有相应的访问权限,或者添加一条相应的爬网规则.如果目标资源库是一个ShareP ...

  8. nginx分发请求的2种方式:1、指明server_name;2、通过location过滤uri来分发请求;

    user nginx; worker_processes 8; # = cpu num; error_log /data/nginx/log/error/error.log warn; # warn, ...

  9. vue-cli3.x中使用axios发送请求,配合webpack中的devServer编写本地mock数据接口(get/post/put/delete)

    vue-cli3.x中使用axios发送请求,配合webpack中的devServer编写本地mock数据接口(get/post/put/delete) 手把手式笔记 Axios配置 安装 axios ...

  10. Python 发送 email 的两种方式

    Python发送email的两种方式,分别为使用登录邮件服务器.调用sendmail命令来发送三种方法 Python发送email比较简单,可以通过登录邮件服务来发送,linux下也可以使用调用sen ...

随机推荐

  1. 深入探讨API调用性能优化与错误处理

    ​ 随着互联网技术的不断发展,API(应用程序接口)已经成为软件系统中重要的组成部分.而优化API调用的性能以及处理错误和异常情况则是保障系统稳定性和可靠性的关键.本文将从以下几个方面来探讨如何进行性 ...

  2. 深入探究API接口

    作为程序员,我们经常会遇到需要获取外部数据或调用外部服务的情况.而API(Application Programming Interface,应用程序编程接口)接口就是这样的一种机制,它允许我们的应用 ...

  3. grinder使用入门

    安装配置 自动安装脚本编写 移步我的github下载脚本,只要修改下配置信息,即可完成安装 环境变量设置:

  4. 用shell命令绘制三角形

    本文旨在通过几个经典的图案来练习shell编程,涉及知识点:for循环,大小比较,基本的数学公式计算,echo小技巧.update:2019-10-17 10:13:54 初次绘制 $ for ((l ...

  5. 【算法】湖心岛上的数学梦--用c#实现一元多次方程的展开式

    每天清晨,当第一缕阳光洒在湖面上,一个身影便会出现在湖心小岛上.她坐在一块大石头上,周围被茂盛的植物环绕,安静地沉浸在数学的世界中. 这个姑娘叫小悦,她的故事在这个美丽的湖心小岛上展开.每天早晨,她都 ...

  6. 为什么大家都在用 WebP?

    WebP 是谷歌在 2010 年提出的一种新型的图片格式,放到现在来讲,已经不算是"新"技术了,毕竟已经有了更新的 JPEG XL 和 AVIF .但是在日常工作中,大家时常会碰到 ...

  7. Jquery 将 JSON 列表的 某个属性值,添加到数组中,并判断一个值,在不在数据中

    jquery 将 JSON 列表的 某个属性值,添加到数组中 如果你有一个JSON列表,并且想要将每个对象的某个属性值添加到数组中,你可以使用jQuery的$.each()函数来遍历JSON列表,并获 ...

  8. 快速启动Stable Diffusion WebUI

    快速启动Stable Diffusion WebUI详情    产品文档   输入文档关键字查找   机器学习PAI 产品概述 快速入门 操作指南 准备工作 开通PAI并创建默认工作空间 开通并授权依 ...

  9. 浅谈关于LCA

    prologue 本身只会 tarjan 和 倍增法求LCA 的,但在发现有一种神奇的\(O(1)\) 查询 lca 的方法,时间优化很明显. main body 倍增法 先讨论倍增法,倍增法求 lc ...

  10. 【v2v迁移】Xen2kvm 迁移-Windows篇

    迁移环境: 源平台:华为FusionComputeV100R006C10SPC101 目标平台:基于KVM虚拟化的云平台,本文以原生的libvirt为例 虚拟机:Windows server 2012 ...