一篇学通Axios

Axios 是一个基于 Promise 的 HTTP 客户端,用于浏览器和 node.js 环境。它提供了一种简单易用的方式来发送 HTTP 请求,并支持诸如请求和响应拦截、转换数据、取消请求以及自动转换 JSON 数据等功能。

Axios 名字的由来

Axios 的名字来源于希腊神话中的英雄 Axios。这位英雄是一个勇敢的冒险家,拥有强大的力量和知识,能够改变任何事物,使它们变得更加强大。Axios 库的设计初衷和命名灵感正是源自于这位英雄,旨在提供一种强大且灵活的 HTTP 客户端,帮助开发者在前端和 Node.js 环境中轻松发送 HTTP 请求,并处理各种复杂的网络交互场景。

Axios 详细介绍

  1. 基本概念

    • Axios(全称 ajax I/O system)不是一种新技术,本质上是对原生 XHR(XMLHttpRequest)的封装,但它是基于 Promise 的实现版本,符合最新的 ES 规范。
    • Axios 提供了简单而直观的 API,使得在前端应用程序中进行 HTTP 通信变得更加容易。
    • Axios 可以与现代前端框架(如 React、Vue.js 和 Angular)以及后端服务器(如 Node.js)配合使用。
  2. 主要特性

    • 从浏览器中创建 XMLHttpRequests。
    • 从 node.js 创建 http 请求。
    • 支持 Promise API。
    • 拦截请求和响应。
    • 转换请求数据和响应数据。
    • 取消请求。
    • 自动转换 JSON 数据。
    • 客户端支持防御 XSRF。

Axios 安装

Axios 可以通过多种方式进行安装,包括使用 npm、yarn 或 CDN。

  • 使用 npm

    复制代码
      npm install axios
  • 使用 yarn

    复制代码
     yarn add axios
  • 使用 CDN

    复制代码
     <script src="https://unpkg.com/axios/dist/axios.min.js"></script>

Axios 示例

1. 发送 GET 请求

  • 基本用法

    axios.get('/user?ID=12345')
    .then(function (response) {
    console.log(response);
    })
    .catch(function (error) {
    console.log(error);
    });

    // 或者使用 axios(config) 形式
    axios({
    method: 'get',
    url: '/user',
    params: {
    ID: 12345
    }
    })
    .then(function (response) {
    console.log(response);
    })
    .catch(function (error) {
    console.log(error);
    });

  • 使用 axios 实例

    const instance = axios.create({
    baseURL: 'https://some-domain.com/api/',
    timeout: 1000,
    headers: {'X-Custom-Header': 'foobar'}
    });

    // 发送请求
    instance.get('/user?ID=12345')
    .then(function (response) {
    console.log(response);
    })
    .catch(function (error) {
    console.log(error);
    });

2. 发送 POST 请求

  • application/json 类型

    axios.post('/user', {
    firstName: 'Fred',
    lastName: 'Flintstone'
    })
    .then(function (response) {
    console.log(response);
    })
    .catch(function (error) {
    console.log(error);
    });

  • form-data 类型

    const formData = new FormData();
    formData.append('file', fileInput.files[0]);
    formData.append('user', '12345');

    axios.post('/upload', formData, {
    headers: {
    'Content-Type': 'multipart/form-data'
    }
    })
    .then(function (response) {
    console.log(response);
    })
    .catch(function (error) {
    console.log(error);
    });

3 请求拦截器和响应拦截器

  • 请求拦截器

    axios.interceptors.request.use(function (config) {
    // 在发送请求之前做些什么
    return config;
    }, function (error) {
    // 对请求错误做些什么
    return Promise.reject(error);
    });

  • 响应拦截器

    axios.interceptors.response.use(function (response) {
    // 对响应数据做点什么
    return response;
    }, function (error) {
    // 对请求错误做些什么
    return Promise.reject(error);
    });

  • Axios 官方站点: https://axios-http.com/zh/

  • Axios 源码地址:https://github.com/axios/axios



相关推荐
2301_805962933 分钟前
ESP32 HTTP OTA 本地测试教程
网络·网络协议·http
酉鬼女又兒4 分钟前
零基础入门前端JavaScript Object 对象完全指南:从基础到进阶(可用于备赛蓝桥杯Web应用开发赛道)
开发语言·前端·javascript·职场和发展·蓝桥杯
Blurpath住宅代理5 分钟前
HTTP与SOCKS5代理深度对比:从协议层到实战选型指南
爬虫·http·静态ip·动态代理·住宅ip·住宅代理
RPGMZ7 分钟前
RPGMakerMZ游戏引擎 地图角色顶部显示称号
javascript·游戏引擎·rpgmz·rpgmakermz
Rabbit_QL8 分钟前
【HTTP协议解读】01小白篇:理解互联网的通信语言HTTP
网络·网络协议·http
wuhen_n11 分钟前
异步组件与 Suspense:如何优雅地处理加载状态并优化首屏加载?
前端·javascript·vue.js
万物得其道者成11 分钟前
uni-app App 端不支持 SSE?用 renderjs + XHR 流式解析实现稳定输出
前端·javascript·uni-app
不会写DN13 分钟前
[特殊字符] JS Date 对象8大使用场景
开发语言·前端·javascript
__zRainy__15 分钟前
使用 OpenSSL 创建本地开发环境受信任的 HTTPS 证书
网络协议·http·https
雨季mo浅忆16 分钟前
el-upload二次封装带表格校验组件
javascript·vue2