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

详细介绍:Axios 全面详解

一、Axios 是什么?

Axios 是一个轻量级的 HTTP 请求库,用来发送网络请求(GET、POST、PUT、DELETE 等),底层基于:

  • 浏览器环境: 使用 XMLHttpRequest

  • Node.js 环境: 使用 http 模块

相比原生的 fetch()XMLHttpRequest

  • 语法更简洁

  • 支持请求/响应拦截

  • 支持自动 JSON 转换

  • 支持请求取消

  • 支持并发控制

  • 兼容旧浏览器


⚙️ 二、安装与引入

# npm 安装
npm install axios
# yarn 安装
yarn add axios

在前端项目中使用:

import axios from 'axios';

在 Node.js 中也可以直接使用:

const axios = require('axios');

三、基础用法

1️⃣ GET 请求

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

2️⃣ POST 请求

axios.post('https://api.example.com/login', {username: 'admin',password: '123456'
})
.then(res => console.log(res.data))
.catch(err => console.error(err));

3️⃣ 并发请求

axios.all([axios.get('/user'),axios.get('/comments')
]).then(axios.spread((user, comments) => {console.log(user.data, comments.data);
}));

四、常见配置项(axios config)

Axios 的第二个参数可以传一个配置对象:

axios({method: 'post',url: '/user/12345',data: { name: 'Tom' },headers: { 'Authorization': 'Bearer token' },timeout: 5000,responseType: 'json',  // 支持 arraybuffer, blob, document, json, text, stream
});

常用配置项说明:

配置项说明
url请求地址
method请求方法(get、post、put、delete 等)
baseURL设置统一的基础路径
headers自定义请求头
paramsURL 查询参数(GET 参数)
data请求体数据(POST 数据)
timeout超时时间(毫秒)
responseType响应数据类型
auth基础认证 {username, password}
withCredentials是否跨域时携带 cookie

五、拦截器机制(Interceptor)

Axios 提供了两类拦截器:请求拦截器响应拦截器

1️⃣ 请求拦截器

可以在请求发出前做统一处理,比如添加 Token。

axios.interceptors.request.use(config => {const token = localStorage.getItem('token');if (token) config.headers.Authorization = `Bearer ${token}`;return config;},error => Promise.reject(error)
);

2️⃣ 响应拦截器

可以统一处理返回结果或错误。

axios.interceptors.response.use(response => {// 返回数据前的处理return response.data;},error => {if (error.response && error.response.status === 401) {console.log('未授权,请重新登录');}return Promise.reject(error);}
);

六、创建 Axios 实例(常用于项目封装)

const service = axios.create({baseURL: 'https://api.example.com/',timeout: 8000
});
service.interceptors.request.use(config => {// 统一添加 tokenconfig.headers.Authorization = 'Bearer ' + localStorage.getItem('token');return config;
});
service.interceptors.response.use(res => res.data);
export default service;

使用时:

import service from './request';
service.get('/user').then(data => console.log(data));

七、错误处理

Axios 会在请求失败时返回一个 error 对象,可通过以下方式判断:

axios.get('/api').catch(error => {if (error.response) {console.log('服务器返回错误状态码:', error.response.status);} else if (error.request) {console.log('请求已发送但未收到响应');} else {console.log('请求设置错误:', error.message);}});

⚡ 八、取消请求

通过 AbortController(或旧版的 CancelToken)可以中止请求。

const controller = new AbortController();
axios.get('/long-request', { signal: controller.signal }).catch(e => console.log('请求被取消'));
controller.abort();  // 主动取消请求

九、Axios 原理简析

Axios 的核心机制:

  1. 创建实例(axios.create)

    • 实际是创建一个带有默认配置的 Axios 对象。

  2. 请求调度器(dispatchRequest)

    • 判断当前环境(浏览器 or Node)

    • 分别使用 XMLHttpRequesthttp.request() 发送请求

  3. 拦截器链(InterceptorManager)

    • 请求拦截器 → 发请求 → 响应拦截器

    • 内部通过 Promise 链式调用 实现拦截与传递。

请求链路:
request interceptors → dispatch request → response interceptors

十、常见高级技巧

功能示例
设置全局默认配置axios.defaults.baseURL = '/api'
设置全局 headersaxios.defaults.headers.common['Authorization'] = token
文件上传axios.post('/upload', formData, { headers: {'Content-Type': 'multipart/form-data'} })
文件下载axios.get('/file', { responseType: 'blob' })
超时重试配合 axios-retry 插件
并发控制Promise.all 或队列机制管理

十一、与 Fetch 的区别

特性AxiosFetch
兼容性IE11 可用IE 不支持
超时控制支持需手动实现
拦截器
自动 JSON 转换需手动调用 .json()
取消请求内置支持需 AbortController
上传/下载进度支持较麻烦

✅ 十二、小结

优点缺点
API 简洁体积比 fetch 略大
支持拦截器某些错误类型不易捕获
支持并发与取消不支持流式响应
支持浏览器 + Node

http://www.rkmt.cn/news/81100.html

相关文章:

  • MGR-单主模式搭建-实操篇 - Me
  • 2025年卡尔费休试剂直销厂家权威推荐榜单:费休氏试剂/卡尔菲休试剂/卡尔费休源头厂家精选 - 品牌推荐官
  • 2025年五大水产礼盒推荐厂商排行榜,新测评精选水产礼盒资深 - 工业品牌热点
  • 2025年热固复合保温板源头厂家权威推荐榜单:匀质复合保温板/无机不燃保温板/复合材料保温板一体化系统厂家精选 - 品牌推荐官
  • 64.【.NET8 实战--孢子记账--从单体到微服务--转向微服务】--新增功能--预算报表 - 指南
  • 2025高精度/高效的/稳定性较好的气体发生器实力厂家口碑推荐/源头厂家 - 品牌推荐大师1
  • Blocker:高效管理Android应用组件的全能工具箱
  • 2025波形护栏板公司优质推荐指南交通设施行业选品参考 - 优质品牌商家
  • 2025年陶瓷片产品推荐,创新技术引领行业新潮流! - 讯息观点
  • 2025年12月测评:2026养发馆加盟推荐榜TOP5,政策优势深度解析 - 小白条111
  • 2025年西安方美创信公司排名:西安方美创信价格合理吗、靠不 - 工业推荐榜
  • 别再付费生图了!N8N+即梦4.5无限免费用!
  • 重练算法(代码随想录版) day36 - 动态规划part4
  • 2025宁波英国留学中介哪个好 - 留学品牌推荐官
  • 2025年十大5斤酿酒设备批发与家庭酿酒设备厂家排行榜,新测 - 工业品牌热点
  • 2025年12月出国留学机构推荐:基于权威数据的多维度综合实力排行榜单深度解析 - 品牌推荐
  • MGR-单主模式搭建步骤 - Me
  • 金吉列 联系方式: 留学咨询选择建议及官方信息核实要点总结 - 品牌推荐
  • 2025苏州民间借贷纠纷律师服务核心能力深度评测报告 - 讯息观点
  • 软连接导致的 Ubuntu 系统盘爆满事件纪录
  • 如何在 Kuscia 中升级引擎镜像?
  • 金吉列 联系方式: 留学咨询机构选择前的通用考量指南 - 品牌推荐
  • 测汞仪厂家实力排名:2025年冷原子荧光测汞仪性价比推荐,哪家售后好?哪家信誉好?哪家口碑好? - 品牌推荐大师1
  • 2025年安徽云服务器软件服务商权威推荐榜单:管家婆软件/ERP软件/进销存软件综合服务商精选 - 品牌推荐官
  • 2025好的英国留学中介有哪些 - 留学品牌推荐官
  • 2025英国留学机构推荐 - 留学品牌推荐官
  • 2025起重电磁铁生产商TOP5权威推荐:正规厂商助力工业高 - mypinpai
  • 2025重庆维修改造厂家TOP5权威推荐:资深供应商甄选指南 - 工业品牌热点
  • 靠谱财务老牌公司排行,为你甄选比较不错的财务机构 - 工业品牌热点
  • 门店顾客安全监控 AI 卫士:AI 跌倒防护系统