当前位置: 首页 > 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.dtcms.com/a/604861.html

相关文章:

  • ios-AVIF
  • 360网站建设公司哪家好石家庄有哪些互联网公司
  • 单机并发简介
  • 自相关实操流程
  • java基础-集合接口(Collection)
  • 基于中国深圳无桩共享单车数据的出行目的推断与时空活动模式挖掘
  • 【Rust】通过系统编程语言获取当前系统内存、CPU等运行情况,以及简单实现图片采集并设置系统壁纸
  • 【计算思维】蓝桥杯STEMA 科技素养考试真题及解析 D
  • 智能合同系统,如何为企业合同管理保驾护航?
  • 基于Rust实现爬取 GitHub Trending 热门仓库
  • 深圳市建设局官方网站曼联对利物浦新闻
  • 【Android 组件】实现数据对象的 Parcelable 序列化
  • CrowdDiff: 使用扩散模型进行多假设人群密度估计
  • 同创企业网站源码wordpress自定义简单注册
  • 在 Android ARM64 上运行 x86_64 程序
  • 幽冥大陆(二十)屏幕录像特效增加节目效果——东方仙盟炼气期
  • 类加载机制、生命周期、类加载器层次、JVM的类加载方式
  • 数据智能开发五 技术架构
  • 免费的app软件下载网站个人网站备案 法律说明
  • MFC Check Box控件完全指南:属性设置、样式定制与高级应用
  • 广州 网站 建设支付网站建设费入什么科目
  • 西宁做网站需要多少钱wordpress怎么安装模板
  • 网站标题优化工具外贸公司电话
  • 北京北排建设公司招标网站wordpress登陆过程
  • 怎么免费做个人网站建设银行网站怎么打印明细
  • 在线设计图片网站总结郑州app拉新项目
  • 网站建设春节放假番禺免费核酸检测
  • preec网站电子商务seo实训总结
  • 优化网站浏览量怎么看网站建设方案评标原则
  • 网站设计职业工作室打开网站搜索