使用axios发送请求的几种方式
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发送请求的几种方式的更多相关文章
- java web前端发送请求的4种方式
表单 action, 链接href,js 绑定按钮 ajax绑定标签 <h1>通过表单提交参数</h1> <form action="/day46_v1/Ser ...
- httpclient发送请求的几种方式
package asi; import org.apache.http.HttpEntity; import org.apache.http.client.config.RequestConfig; ...
- C#中Post请求的两种方式发送参数链和Body的
POST请求 有两种方式 一种是组装key=value这种参数对的方式 一种是直接把一个字符串发送过去 作为body的方式 我们在postman中可以看到 sfdsafd sdfsdfds publi ...
- Vue项目中使用Vuex + axios发送请求
本文是受多篇类似博文的影响写成的,内容也大致相同.无意抄袭,只是为了总结出一份自己的经验. 一直以来,在使用Vue进行开发时,每当涉及到前后端交互都是在每个函数中单独的写代码,这样一来加大了工作量,二 ...
- 第二节:SSL证书的申请、配置(IIS通用)及跳转Https请求的两种方式
一. 相关概念介绍 1. SSL证书服务 SSL证书服务由"服务商"联合多家国内外数字证书管理和颁发的权威机构.在xx云平台上直接提供的服务器数字证书.您可以在阿里云.腾讯云等平台 ...
- Spring MVC中forward请求转发2种方式(带参数)
Spring MVC中forward请求转发2种方式(带参数) http://www.51gjie.com/javaweb/956.html
- 解决 SharePoint 2010 拒绝访问爬网内容源错误的小技巧(禁用环回请求的两种方式)
这里有一条解决在SharePoint 2010搜索爬网时遇到的“拒绝访问错误”的小技巧. 首先要检查默认内容访问帐户是否具有相应的访问权限,或者添加一条相应的爬网规则.如果目标资源库是一个ShareP ...
- 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, ...
- vue-cli3.x中使用axios发送请求,配合webpack中的devServer编写本地mock数据接口(get/post/put/delete)
vue-cli3.x中使用axios发送请求,配合webpack中的devServer编写本地mock数据接口(get/post/put/delete) 手把手式笔记 Axios配置 安装 axios ...
- Python 发送 email 的两种方式
Python发送email的两种方式,分别为使用登录邮件服务器.调用sendmail命令来发送三种方法 Python发送email比较简单,可以通过登录邮件服务来发送,linux下也可以使用调用sen ...
随机推荐
- WPF-利用装饰器实现控件的自由拖动
在项目中经常会遇到类似如下要求的需求,创建允许自由拖动的控件,这样的需求可以使用WPF的装饰器Adorner来实现. 一.什么是装饰器? 装饰器是一种特殊类型的FrameworkElement,装饰器 ...
- iOS日志获取
IOS日志获取 崩溃日志存放目录: /var/mobile/Library/Logs/CrashReporter
- ps aux 命令使用
转载请注明出处: ps aux命令是一个常用的Linux/Unix系统命令,它用于查看正在运行的进程信息.下面是该命令使用的参数介绍.命令响应结果参数介绍以及一些使用实例的总结: 命令使用参数介绍 ...
- Vue3搭建后台管理系统模板
搭建后台管理系统模板 2.1项目初始化 今天来带大家从0开始搭建一个vue3版本的后台管理系统.一个项目要有统一的规范,需要使用eslint+stylelint+prettier来对我们的代码质量做检 ...
- 有人说SaToken吃相难看,你怎么看。
前言 今天摸鱼逛知乎,偶然看到了一个回答,8月份的,是关于SaToken的,一时好奇就点了进去. 好家伙,因为一个star的问题,提问的人抱怨了许多,我有些意外,就仔细看了下面的评论,想知道一部分人的 ...
- open与fopen的区别
1. 来源 从来源的角度看,两者能很好的区分开,这也是两者最显而易见的区别: open是UNIX系统调用函数(包括LINUX等),返回的是文件描述符(File Descriptor),它是文件在文件描 ...
- studio
- 一次考试的简单T3
我的第一个想法其实是毫无头绪 根本就想不到dp,直接就写了爆搜后来讲了才知道... 这种dp的状态好像是一类dp的模型,他们的状态都有这样的一维:以第i个数结尾.这样的dp有什么样的标志呢?以第i个数 ...
- Pandas 读取Eexcel - 间隔N行,读取某列数据
间隔N行,读取某列数据 import pandas as pd def read_vertical(sheet_name, col_idx, gap): """ 竖着读数 ...
- 网络基础-OSI七层vsTCP/UDP四层 五层 数据封装
1.0 网络基础 1.1 网络是什么? 网络是信息传输.接收.共享的虚拟平台,通过它把各个点.面.体的信息联系到一起,从而实现这些资源的共享 网络分类:局域网 ,城域网,广域网 1.2 数据通信方式 ...