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. uniapp 地图如何添加?你要的教程来喽!

    地图在 app 中使用还是很广泛的,常见的应用常见有: 1.获取自己的位置,规划路线. 2.使用标记点进行标记多个位置. 3.绘制多边形,使用围墙标记位置等等. 此篇文章就以高德地图为例,以上述三个常 ...

  2. QA|requests接口请求失败而postman请求成功原因排查|Requests

    requests接口请求失败而postman请求成功原因 代码如下 1 def ihrm_login(login_data, url1): 2 """login_data ...

  3. 利用接口测试框架实现web状态的监控

    之前,我们已经说明了如何实现一个我们的接口测试框架RATF,当然这个框架不止可以用于管理我们的接口测试代码,我们还可以用他来对我们的web进行简单粗暴的监控. 原理: 1. 通过使用配置文件,对要监控 ...

  4. Vim深入使用指南

    Vim深入使用指南 Vim是一款功能强大的文本编辑器,被广泛用于编写和编辑各种类型的文档和代码. 安装Vim 可以操作系统下载并安装Vim.在安装完成后,通过在终端中输入vim命令来启动Vim. Vi ...

  5. Go运算操作符全解与实战:编写更高效的代码!

    本文全面探讨了Go语言中的各类运算操作符,从基础的数学和位运算到逻辑和特殊运算符.文章旨在深入解析每一种运算操作符的工作原理.应用场景和注意事项,以帮助开发者编写更高效.健壮和可读的Go代码. 简介 ...

  6. RPG MAKER MV 打包APK教程(一键打包,无需编写任何代码)

    HTML一键打包APK工具可以快速打包RPG Maker制作出来的游戏, 打包教程如下: 打包软件下载地址: 点击进入下载页面 打包步骤 1.准备好待打包的RPG Maker项目,放在系统的某一目录下 ...

  7. 低代码引擎 TinyEngine 正式发布!

    在当今数字化飞速发展的时代,企业对高效.敏捷的应用程序需求日益旺盛.为了满足这一需求,越来越多的低代码开发平台开始涌现.这些平台通过提供简单易用的开发工具和优化后的开发流程,帮助开发者快速构建高质量. ...

  8. Django框架项目之登录注册——1-登录注册页面、2 多方式登录、3-手机是否存在验证接口、4-腾讯云短信开发、5 短信验证码接口、6-短信登录接口、7-短信注册接口、8-前台登录注册修订

    文章目录 1-登录注册页面 模态登录组件 模态注册组件 导航条:结合实际情况完成样式 登录业务分析 多方式登录 验证码登录 注册业务分析 验证码注册 汇总 2 多方式登录 后台 插件 urls.py ...

  9. gestureRecognition

    这段代码定义了一个名为 gestureRecognition 的函数,它用于识别手势并显示在摄像头或指定图像上.以下是对代码的详细注释:1. 初始化一个空字符串 ges,用于存储手势结果.如果 sel ...

  10. 高可用mongodb集群(分片+副本):用户权限配置

    目录 ■ 创建副本集认证的key文件 ■ 修改配置文件指定keyfile ■ 重新启动节点 ■ 创建帐号和认证 ■ 用管理员帐号可查看整体的分片情况 ■ 用普通帐号访问数据 ■ 客户端连接多个mong ...