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. 单节点 RAID6 可靠性模型

    介绍 独立磁盘冗余阵列(Redundant Arrays of Independent Disks, RAID)是存储业界为保证数据可用性.可靠性和完整性所采用的重要技术,即使在分布式多副本如此流行和 ...

  2. Socket.io入门

    Socket.io入门 根据官方文档socket.io使用必须客户端根服务端一致,socket.io不兼容webSocket或者其他模块,因为socket.io在连接时做了自定义处理, 所以不同的长连 ...

  3. Maven关联本地已有仓库的方法

    1. 将本地仓库目录localwarehouse进行压缩为localwarehouse.rar. 2. 将localwarehouse.rar解压到D:\maven文件夹中,然后在setting.xm ...

  4. CentOS 8 无痕升级到 Rocky Linux

    CentOS 8 无痕升级到 Rocky Linux 1.升级当前系统 dnf upgrade -y 2.重启当前系统: reboot 3.下载脚本: CentOS 8 到 Rocky Linux 8 ...

  5. lattice crosslink开发板mipi核心板csi测试dsi屏lif md6000 fpga

    1. 概述 CrossLink开发板,是用Lattice的芯片CrossLink 家族系列的,LIF-MD6000-6JM80I.该芯片用于桥接视频接口功能,自带2路MIPI硬核的功能,4 LANE  ...

  6. .NET周刊【9月第1期 2023-09-03】

    国内文章 如何正确实现一个自定义 Exception https://www.cnblogs.com/kklldog/p/how-to-design-exception.html 最近在公司的项目中, ...

  7. 如何在kubernetes中实现分布式可扩展的WebSocket服务架构

    如何在kubernetes中实现分布式可扩展的WebSocket服务架构 How to implement a distributed and auto-scalable WebSocket serv ...

  8. LeetCode 周赛上分之旅 #45 精妙的 O(lgn) 扫描算法与树上 DP 问题

    ️ 本文已收录到 AndroidFamily,技术和职场问题,请关注公众号 [彭旭锐] 和 BaguTree Pro 知识星球提问. 学习数据结构与算法的关键在于掌握问题背后的算法思维框架,你的思考越 ...

  9. oracle监听配置与防火墙问题

    在建好pdb容器后,需配置网络,才能从客户端连接服务器端 1.首先查看pdb容器的服务名 lsnrctl status ... Service "19cdb" has 1 inst ...

  10. 文心一言 VS 讯飞星火 VS chatgpt (111)-- 算法导论10.2 2题

    二.用go语言,用一个单链表 L实现一个栈.要求操作 PUSH和 POP 的运行时间仍为 O(1). 文心一言: 在 Go 语言中,我们可以用结构体来实现一个单链表,然后再用栈的相关操作. 以下是一个 ...