370 字
1 分钟
axios 学习笔记
2022-05-05

axios 笔记#

一、axios 概述、配置#

主要功能:

  • 浏览器端发送 AJAX 请求
  • Node.js 支持下发送 HTTP 请求
  • 支持 Promise API
  • 请求和响应拦截
  • 请求和响应的转发
  • 取消请求
  • 客户端防御 XSRF

配置:

<script src="https://cdn.bootcdn.net/ajax/libs/axios/0.27.2/axios.min.js"></script>
npm install axios

二、axios 基本使用#

!function Action() {
axios({
method: 'xxx', // 方法类型
url: 'xxx',
// 请求体,如果需要的话
data: {
a: xxx,
b: xxx,
},
}).then(resp => {
console.log(resp);
})
}();

三、axios 其他请求方法#

axios.request(config);
axios.post(url, [data], [config]);
...

​ 更多见于官方文档。


四、axios 响应结果结构#

{
config: ..., // axios 配置
data: ..., // 响应数据
headers: ..., // 响应头
request: ..., // 原生 AJAX 实例
status: xxx,
statusText: "xxx",
}

五、axios config 对象#

config 对象体常用值如下:

{
url: 'xxx',
method: 'xxx',
baseURL: 'xxx', // axios 会将它与 URL 自动拼接
// 下面两个都是做预处理
transformRequest: [function (data, headers) {
...
return data;
}],
transformResponse: [function(data) {
...
return data;
}],
headers: {xxx},
params: {xxx},
data: {xxx}, // 或这样:data: 'Country=Brasil&City=Belo Horizonte',
timeout: xxx,
}

六、axios 默认设置#

​ 方法:

axios.defaults.method = 'GET';
axios.defaults.baseURL = 'http://localhost:3000';
axios.defaults.params = {id: 300};
axios.defaults.timeout = 3000;
axios({
url: '/posts',
}).then(resp => {
console.log(resp);
})

七、axios 创建实例对象发送请求#

// 实例化
const obj = axios.create({
baseURL: 'https://api.apiopen.top',
timeout: 2000
});
// 调用方法,也可以直接 obj(config),使用与 axios 对象是很类似的
obj.get('/getJoke').then(resp => {
console.log(resp);
});

​ 注:创建实例对象的好处是,可以给几类不同的请求指定不同的默认配置。而不是使用上面的全局默认配置。


八、拦截器#

​ 简单来说,就是函数。可以在请求或响应前拦截进行检测。(也就是实现一些预处理)

// 请求拦截器
axios.interceptors.request.use(config => {
// 这里的 config 就是 config 对象
console.log('请求拦截器 成功');
return config;
}, err => {
console.log('请求拦截器 失败');
return Promise.reject(err);
});
// 响应拦截器
axios.interceptors.response.use(resp => {
console.log('响应拦截器 成功');
return resp;
}, err => {
console.log('响应拦截器 失败');
return Promise.reject(err);
})
// 具体的某个请求
axios.get('https://example.com/api/get').then(resp => {
console.log(resp);
}).catch(err => {
console.warn(err);
})

​ 提示:

  • 请求拦截器可以用于检查并修改配置
  • 响应拦截器可以用于对原生的 axios 响应对象进行过滤
  • 其中任何一个地方抛出错误或出现问题,都会按以下链传递:请求拦截器 -> 响应拦截器 -> 请求的自定义 catch

九、axios 取消请求#

​ 一个例子:(发送请求前先进行检查,若有,则取消重发)

var cancel = null;
sendBtn.onclick = function() {
// 判断是否有未完成请求
if (cancel !== null) {
cancel();
}
axios({
method: 'GET',
url: 'http://localhost:3000/posts',
// 添加 cancelToken 配置项
cancelToken: new axios.CancelToken(c => {
// 将 c 的值赋给 cancel
cancel = c;
})
}).then(resp => {
console.log(resp);
// 请求完成,重置
cancel = null;
})
}
cancelBtn.onclick = function() {
cancel();
}

十、多个并发请求(弃用)#

​ 例子:

function getUserAccount() {
return axios.get('/user/12345');
}
function getUserPermissions() {
return axios.get('/user/12345/permissions');
}
// 参数为所有 axios 请求函数的数组
axios.all([getUserAccount(), getUserPermissions()])
.then(axios.spread(function (acct, perms) {
// 两个请求现在都执行完成
}));

​ 注:现推荐使用 Promise.all() 替代以上方法。

分享

如果这篇文章对你有帮助,欢迎分享给更多人!

axios 学习笔记
https://miku.top/posts/axios-learn/
作者
律回
发布于
2022-05-05
许可协议
CC BY-SA 4.0

部分信息可能已经过时

目录