当前位置: 首页 > news >正文

axios七大特性

axios 是一个基于 Promise 的 HTTP 客户端,用于浏览器和 node.js。它有许多优秀的特性,以下是其中七个主要特性及其详细代码示例:

1. 基于 Promise

axios 的所有请求都返回一个 Promise 对象,这使得异步操作变得非常直观和易于管理。

 
axios.get('https://api.example.com/data')
.then(response => {
console.log(response.data);
})
.catch(error => {
console.error(error);
});

2. 支持请求和响应拦截

拦截器允许你在请求发送到服务器或响应返回到客户端之前对它们进行修改。

 
// 请求拦截器
axios.interceptors.request.use(
config => {
// 在发送请求之前做些什么
return config;
},
error => {
// 对请求错误做些什么
return Promise.reject(error);
}
);// 响应拦截器
axios.interceptors.response.use(
response => {
// 对响应数据做点什么
return response;
},
error => {
// 对响应错误做点什么
return Promise.reject(error);
}
);

3. 转换请求和响应数据

你可以为请求和响应数据指定转换器。

 
axios.defaults.transformRequest = [function (data) {
// 对请求数据进行转换
return JSON.stringify(data);
}];axios.defaults.transformResponse = [function (data) {
// 对响应数据进行转换
return data;
}];

4. 取消请求

使用 CancelToken 可以取消一个正在进行的请求。

 
const CancelToken = axios.CancelToken;
let source = CancelToken.source();axios.get('/user/12345', {
cancelToken: source.token
}).catch(function (thrown) {
if (axios.isCancel(thrown)) {
console.log('Request canceled', thrown.message);
} else {
// 处理错误
}
});// 取消请求 (请求原因是可选的)
source.cancel('Operation canceled by the user.');

5. 自动转换 JSON 数据

axios 会自动将 JSON 数据转换为 JavaScript 对象。

 
axios.get('https://api.example.com/data')
.then(response => {
// axios 会自动将 JSON 数据转换为 JavaScript 对象
const data = response.data;
console.log(data);
});

6. 客户端支持防御 XSRF

axios 库支持库级别的 XSRF(跨站请求伪造)保护。

 
// 当使用 withCredentials 时,axios 会自动设置 XSRF-TOKEN cookie
axios.defaults.xsrfCookieName = 'XSRF-TOKEN'; // 默认值是:XSRF-TOKEN
axios.defaults.xsrfHeaderName = 'X-XSRF-TOKEN'; // 默认值是:X-XSRF-TOKEN

7. 支持 HTTP 授权

你可以通过配置对象的 auth 属性来自动设置 HTTP 授权头。

 
axios({
method: 'get',
url: 'https://api.example.com/private',
auth: {
username: 'myusername',
password: 'mypassword'
}
});

在上述示例中,axios 会自动在请求头中添加 Authorization 字段,值为 Basic base64(username:password)

请注意,axios 的特性和用法远不止这些,这些只是其中的一部分。要了解更多关于 axios 的信息,建议查阅其官方文档。

相关文章:

  • Golang 协程和 Channel 的协同工作
  • Facebook开户 | Facebook二不限户
  • java —— 匿名内部类与 Lambda 表达式
  • python-最接近target的值
  • R语言绘图 --- 柱状图(Biorplot 开发日志 --- 3)
  • Tree——输出项目的文件结构(Linux)
  • 多项目的.net core解决方案(项目间引用)如何使用Docker部署
  • keepalived安装文档
  • Python知识点11---高阶函数
  • 冒泡排序与快速排序
  • C#中的值类型与引用类型
  • 计算机毕业设计 | SpringBoot+vue仓库管理系统(附源码)
  • 欧科云链:Web3.0时代 具备链上数据分析能力的公司愈发凸显其价值
  • JCR一区级 | Matlab实现TCN-BiGRU-MATT时间卷积双向门控循环单元多特征分类预测
  • 解释Python中的PEP 8是什么 为什么它很重要
  • [译]如何构建服务器端web组件,为何要构建?
  • 《Javascript数据结构和算法》笔记-「字典和散列表」
  • 0基础学习移动端适配
  • Angular数据绑定机制
  • Javascript Math对象和Date对象常用方法详解
  • Mysql5.6主从复制
  • PyCharm搭建GO开发环境(GO语言学习第1课)
  • Redis学习笔记 - pipline(流水线、管道)
  • 更好理解的面向对象的Javascript 1 —— 动态类型和多态
  • 完善智慧办公建设,小熊U租获京东数千万元A+轮融资 ...
  • #define与typedef区别
  • #if 1...#endif
  • #前后端分离# 头条发布系统
  • #我与Java虚拟机的故事#连载03:面试过的百度,滴滴,快手都问了这些问题
  • $refs 、$nextTic、动态组件、name的使用
  • (8)STL算法之替换
  • (arch)linux 转换文件编码格式
  • (读书笔记)Javascript高级程序设计---ECMAScript基础
  • (独孤九剑)--文件系统
  • (翻译)terry crowley: 写给程序员
  • (个人笔记质量不佳)SQL 左连接、右连接、内连接的区别
  • (过滤器)Filter和(监听器)listener
  • (含笔试题)深度解析数据在内存中的存储
  • (简单) HDU 2612 Find a way,BFS。
  • (十三)Maven插件解析运行机制
  • (一)SpringBoot3---尚硅谷总结
  • (一)utf8mb4_general_ci 和 utf8mb4_unicode_ci 适用排序和比较规则场景
  • (原創) 如何刪除Windows Live Writer留在本機的文章? (Web) (Windows Live Writer)
  • ***php进行支付宝开发中return_url和notify_url的区别分析
  • **PyTorch月学习计划 - 第一周;第6-7天: 自动梯度(Autograd)**
  • .net core 调用c dll_用C++生成一个简单的DLL文件VS2008
  • .NET LINQ 通常分 Syntax Query 和Syntax Method
  • .net 写了一个支持重试、熔断和超时策略的 HttpClient 实例池
  • .NET和.COM和.CN域名区别
  • [18] Opencv_CUDA应用之 基于颜色的对象检测与跟踪
  • [CF]Codeforces Round #551 (Div. 2)
  • [Cloud Networking] Layer 2
  • [E单调栈] lc2487. 从链表中移除节点(单调栈+递归+反转链表+多思路)
  • [GN] 后端接口已经写好 初次布局前端需要的操作(例)
  • [GUET-CTF2019]encrypt