什么是axios?怎么使用axios封装Ajax?

什么是axios

  Axios 是一个基于 Promise 的 HTTP 客户端,它可以在浏览器和 Node.js 环境中使用。Axios 提供了简单易用的 API,用于执行各种 HTTP 请求操作,如 GET、POST、PUT、DELETE 等。

以下是 Axios 的一些关键特性和功能:

  1. 基于 Promise:Axios 的 API 设计完全基于 Promise,这使得它能够很好地与 async/await 语法结合使用,从而简化了异步操作的处理。
  2. 请求和响应的拦截器:Axios 支持请求和响应的拦截器,允许你在请求发送前或响应接收后对其进行处理。这可以用于添加认证信息、处理错误、记录日志等。
  3. 自动转换数据:Axios 会自动将请求数据转换为请求体(例如,将 JavaScript 对象转换为 JSON 字符串),并自动解析响应数据(例如,将 JSON 字符串转换为 JavaScript 对象)。
  4. 取消请求:你可以使用 Axios 提供的取消令牌(CancelToken)来取消已发出的请求。
  5. 防止跨站请求伪造(XSRF):在浏览器环境中,Axios 可以自动从 cookies 中读取 XSRF 令牌,并将其添加到请求头中,以防止跨站请求伪造攻击。
  6. 配置灵活性:你可以通过创建一个 Axios 实例来配置其默认设置,如基础 URL、超时时间、请求头等。这使得在不同的项目或不同的请求中重用相同的配置变得更加容易。
  7. 浏览器和 Node.js 兼容:Axios 可以在所有现代浏览器中运行,并且也支持在 Node.js 环境中使用,这使得它成为一个跨平台的 HTTP 客户端。
  8. 小型且高效:Axios 的代码库相对较小,但它提供了丰富的功能,使得它成为许多 Web 应用程序和 API 的首选 HTTP 客户端。

总的来说,Axios 是一个功能强大、易于使用且灵活的 HTTP 客户端,它能够帮助开发者以简洁和高效的方式处理 HTTP 请求和响应。

怎么使用axios封装Ajax

  使用 Axios 封装 AJAX 请求是一个常见的做法,它可以帮助你简化代码、统一请求格式和处理逻辑。以下是一个基本的 Axios 封装示例,包括请求和响应的拦截器、错误处理以及配置默认请求选项。

首先,你需要安装 Axios。如果你还没有安装它,可以使用 npm 或 yarn 进行安装:

npm install axios
# 或者
yarn add axios

然后,你可以创建一个新的文件(例如 axiosInstance.js)来封装 Axios 实例:

// axiosInstance.js
import axios from 'axios';
 
// 创建一个 Axios 实例
const axiosInstance = axios.create({
  baseURL: 'https://api.example.com', // 你的 API 基础 URL
  timeout: 10000, // 请求超时时间
  headers: {
    'Content-Type': 'application/json', // 默认请求头
  },
});
 
// 请求拦截器
axiosInstance.interceptors.request.use(
  config => {
    // 在发送请求之前做些什么,例如添加认证令牌
    // config.headers.Authorization = `Bearer ${token}`;
    return config;
  },
  error => {
    // 对请求错误做些什么
    return Promise.reject(error);
  }
);
 
// 响应拦截器
axiosInstance.interceptors.response.use(
  response => {
    // 对响应数据做点什么,例如统一处理错误状态码
    if (response.status >= 200 && response.status < 300) {
      return response.data; // 返回实际数据
    } else {
      // 处理错误响应,例如显示错误消息或抛出错误
      return Promise.reject(new Error(response.statusText));
    }
  },
  error => {
    // 对响应错误做点什么,例如显示错误消息或抛出错误
    if (error.response) {
      // 服务器返回了一个状态码,且状态码触发了错误处理
      console.error('Error Response:', error.response.data);
      console.error('Error Status:', error.response.status);
      console.error('Error Headers:', error.response.headers);
    } else if (error.request) {
      // 请求已经发出,但没有收到响应
      console.error('Error Request:', error.request);
    } else {
      // 其他错误(例如,设置请求时发生的错误)
      console.error('Error Message:', error.message);
    }
    return Promise.reject(error);
  }
);
 
// 导出 Axios 实例
export default axiosInstance;

现在,你可以在你的应用程序中使用这个封装的 Axios 实例来发送 AJAX 请求。例如:

// someComponent.js 或 anyOtherFile.js
import axiosInstance from './axiosInstance';
 
// 发送一个 GET 请求
axiosInstance.get('/some-endpoint')
  .then(data => {
    console.log('Data:', data);
  })
  .catch(error => {
    console.error('Error:', error);
  });
 
// 发送一个 POST 请求
axiosInstance.post('/another-endpoint', { key: 'value' })
  .then(data => {
    console.log('Data:', data);
  })
  .catch(error => {
    console.error('Error:', error);
  });

这个封装示例提供了基本的功能,但你可以根据需要进行扩展。例如,你可以添加更多的请求拦截器来处理身份验证令牌、全局错误处理逻辑、请求重试机制等。

该如何使用Axios 封装 XHR 请求

实际上,Axios 本身就是一个基于 Promise 的 HTTP 客户端,它已经在内部封装了 XMLHttpRequest (XHR) 的复杂细节,因此你不需要直接使用或封装 XHR。使用 Axios,你可以更方便地发送 HTTP 请求,并处理响应和错误。

不过,如果你想要了解如何使用 Axios 来替代传统的 XHR 请求,或者想要在你的项目中通过 Axios 来封装一些常用的请求逻辑,以下是一个基本的指南:

  1. 安装 Axios:
    首先,你需要确保你的项目中已经安装了 Axios。如果还没有安装,可以使用 npm 或 yarn 进行安装。
npm install axios
# 或者
yarn add axios
  1. 创建 Axios 实例(可选):
    你可以创建一个 Axios 实例来配置一些默认的设置,比如基础 URL、超时时间、请求头等。这类似于传统 XHR 中的“打开”一个连接并设置请求头。
const axiosInstance = axios.create({
  baseURL: 'https://api.example.com',
  timeout: 10000,
  headers: {'X-Custom-Header': 'foobar'}
});
  1. 发送请求:
    使用 Axios 的方法(如 get、post、put、delete 等)来发送 HTTP 请求。这些方法会返回一个 Promise,你可以使用 .then() 和 .catch() 来处理响应和错误。
// 使用默认的 axios
axios.get('/users')
  .then(response => {
    console.log(response.data);
  })
  .catch(error => {
    console.error('Error fetching users:', error);
  });
 
// 使用自定义的 axios 实例
axiosInstance.post('/users', {
  name: 'John Doe',
  email: 'john.doe@example.com'
})
  .then(response => {
    console.log('User created:', response.data);
  })
  .catch(error => {
    console.error('Error creating user:', error);
  });
  1. 配置拦截器(可选):
    你可以配置请求拦截器和响应拦截器来在请求发送之前或响应到达之后执行一些逻辑。这类似于传统 XHR 中的“设置请求头”和“处理响应”。
axiosInstance.interceptors.request.use(config => {
  // 在发送请求之前做些什么,比如添加认证 token
  const token = localStorage.getItem('token');
  if (token) {
    config.headers['Authorization'] = `Bearer ${token}`;
  }
  return config;
}, error => {
  // 对请求错误做些什么
  return Promise.reject(error);
});
 
axiosInstance.interceptors.response.use(
  response => {
    // 对响应数据做些什么
    return response.data;
  },
  error => {
    // 对响应错误做些什么
    if (error.response) {
      // 处理 HTTP 状态码错误
    }
    return Promise.reject(error);
  }
);
  1. 处理响应和错误:
    使用 .then() 方法来处理成功的响应,使用 .catch() 方法来处理错误。你也可以使用 async/await 语法来更简洁地处理异步请求。
async function fetchUsers() {
  try {
    const response = await axiosInstance.get('/users');
    console.log(response.data);
  } catch (error) {
    console.error('Error fetching users:', error);
  }
}
 
fetchUsers();

总之,使用 Axios 封装 HTTP 请求可以大大简化你的代码,并提升可读性和可维护性。你不需要直接处理 XHR 的复杂细节,因为 Axios 已经为你处理了这些。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/921024.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

浅谈,华为切入具身智能赛道

近期&#xff0c;全球具身智能大模型&#xff08;机器人“通用大脑”&#xff09;赛道热闹非凡&#xff0c;科技大厂、初创公司接连发布重磅消息。 国外&#xff1a; 10月底&#xff0c;美国科技巨头【Meta】旗下基础人工智能研究 &#xff08;FAIR&#xff09;公布公司触摸感…

Spring |(二)IOC相关内容 | bean

文章目录 &#x1f4da;bean基础配置&#x1f407;bean的id和class&#x1f407;bean的name属性&#x1f407;bean作用范围scope配置&#x1f407;bean基础配置小结 &#x1f4da;bean实例化&#x1f407;构造方法实例化&#xff08;常用&#xff09;&#x1f407;静态工厂实例…

网络安全-企业环境渗透2-wordpress任意文件读FFmpeg任意文件读

一、 实验名称 企业环境渗透2 二、 实验目的 【实验描述】 操作机的操作系统是kali 进入系统后默认是命令行界面 输入startx命令即可打开图形界面。 所有需要用到的信息和工具都放在了/home/Hack 目录下。 本实验的任务是通过外网的两个主机通过代理渗透到内网的两个主机。…

Java 对象头、Mark Word、monitor与synchronized关联关系以及synchronized锁优化

1. 对象在内存中的布局分为三块区域&#xff1a; &#xff08;1&#xff09;对象头&#xff08;Mark Word、元数据指针和数组长度&#xff09; 对象头&#xff1a;在32位虚拟机中&#xff0c;1个机器码等于4字节&#xff0c;也就是32bit&#xff0c;在64位虚拟机中&#xff0…

Linux 进程概念与进程状态

目录 1. 冯诺依曼体系结构2. 操作系统&#xff08;Operator System&#xff09;2.1 概念2.2 设计OS的目的2.3 系统调用和库函数概念 3. 进程概念3.1 描述进程 - PCB3.2 task_struct3.3 查看进程3.4 通过系统调用获取进程标识符PID&#xff0c; PPID3.5 通过系统调用创建fork 4.…

计算机网络(14)ip地址超详解

先看图&#xff1a; 注意看第三列蓝色标注的点不会改变&#xff0c;A类地址第一个比特只会是0&#xff0c;B类是10&#xff0c;C类是110&#xff0c;D类是1110&#xff0c;E类是1111. IPv4地址根据其用途和网络规模的不同&#xff0c;分为五个主要类别&#xff08;A、B、C、D、…

shell脚本启动springboot项目

nohup java -jar springboot.jar > springboot.log 2>&1 & 表示日志输出重定向到springboot.log日志文件, 而原本的日志继续输出到 项目同级的log文件夹下, 所以这个重定向没必要. 我们没必要要2分日志 #!/bin/bash# 获取springboot项目的进程ID PID$(ps -e…

51c大模型~合集76

我自己的原文哦~ https://blog.51cto.com/whaosoft/12617524 #诺奖得主哈萨比斯新作登Nature&#xff0c;AlphaQubit解码出更可靠量子计算机 谷歌「Alpha」家族又壮大了&#xff0c;这次瞄准了量子计算领域。 今天凌晨&#xff0c;新晋诺贝尔化学奖得主、DeepMind 创始人哈萨…

FileProvider高版本使用,跨进程传输文件

高版本的android对文件权限的管控抓的很严格,理论上两个应用之间的文件传递现在都应该是用FileProvider去实现,这篇博客来一起了解下它的实现原理。 首先我们要明确一点,FileProvider就是一个ContentProvider,所以需要在AndroidManifest.xml里面对它进行声明: <provideran…

【Java】二叉树:数据海洋中灯塔式结构探秘(上)

个人主页 &#x1f339;&#xff1a;喜欢做梦 二叉树中有一个树&#xff0c;我们可以猜到他和树有关&#xff0c;那我们先了解一下什么是树&#xff0c;在来了解一下二叉树 一&#x1f35d;、树型结构 1&#x1f368;.什么是树型结构&#xff1f; 树是一种非线性的数据结构&…

网口输出的加速度传感器

一、功能概述 1.1 设备简介 本模块为了对电机、风机、水泵等旋转设备进行预测性运维而开发&#xff0c;只需一个模块&#xff0c; 就可以采集旋转设备的 3 路振动信号&#xff08;XYZ 轴&#xff09;和一路温度信号&#xff0c;防护等级 IP67 &#xff0c;能够 适应恶劣的工业…

力扣面试经典 150(上)

文章目录 数组/字符串1. 合并两个有序数组2. 移除元素3. 删除有序数组中的重复项4. 删除有序数组的重复项II5. 多数元素6. 轮转数组7. 买卖股票的最佳时机8. 买卖股票的最佳时机II9. 跳跃游戏10. 跳跃游戏II11. H 指数12. O(1)时间插入、删除和获取随机元素13. 除自身以外数组的…

浅谈 proxy

应用场景 Vue2采用的defineProperty去实现数据绑定&#xff0c;Vue3则改为Proxy&#xff0c;遇到了什么问题&#xff1f; - 在Vue2中不能检测数组和对象的变化 1. 无法检测 对象property 的添加或移除 var vm new Vue({data:{a:1} })// vm.a 是响应式的vm.b 2 // vm.b 是…

P4-1【应用数组进行程序设计】第一节——知识要点:一维数组

视频&#xff1a; P4-1【应用数组进行程序设计】第一节——知识要点&#xff1a;一维数组 项目四 应用数组进行程序设计 任务一&#xff1a;冒泡排序 知识要点&#xff1a;一维数组 目录 一、任务分析 二、必备知识与理论 三、任务实施 一、任务分析 用冒泡法对任意输入…

【数据库入门】关系型数据库入门及SQL语句的编写

1.数据库的类型&#xff1a; 数据库分为网状数据库&#xff0c;层次数据库&#xff0c;关系型数据库和非关系型数据库四种。 目前市场上比较主流的是&#xff1a;关系型数据库和非关系型数据库。 关系型数据库使用结构化查询语句&#xff08;SQL&#xff09;对关系型数据库进行…

day07(单片机高级)继电器模块绘制

目录 继电器模块绘制 原理图 布局 添加板框 布线 按tab修改线宽度 布线换层 泪滴 铺铜 铺铜的作用 铺铜的使用规范 添加丝印 步骤总结 继电器模块绘制 到淘宝找一个继电器模块 继电器模块的使用&#xff08;超详细&#xff09;_继电器模块工作原理-CSDN博客文章浏览阅读4.8w次&…

1+X应急响应(网络)病毒与木马的处置:

病毒与木马的处置&#xff1a; 病毒与木马的简介&#xff1a; 病毒和木马的排查与恢复&#xff1a;

【电路笔记 TMS320F28335DSP】时钟+看门狗+相关寄存器(功能模块使能、时钟频率配置、看门狗配置)

时钟源和主时钟&#xff08;SYSCLKOUT&#xff09; 外部晶振&#xff1a;通常使用外部晶振&#xff08;如 20 MHz&#xff09;作为主要时钟源。内部振荡器&#xff1a;还可以选择内部振荡器&#xff08;INTOSC1 和 INTOSC2&#xff09;&#xff0c;适合无需高精度外部时钟的应…

CCE-基础

背景&#xff1a; 虚拟化产生解决物理机资源浪费问题&#xff0c;云计算出现实现虚拟化资源调度和管理&#xff0c;容器出现继续压榨虚拟化技术产生的资源浪费&#xff0c;用命名空间隔离&#xff08;namespace&#xff09; 灰度升级&#xff08;升级中不影响业务&#xff09…

基于LLama_factory的Qwen2.5大模型的微调笔记

Qwen2.5大模型微调记录 LLama-facrotyQwen2.5 模型下载。huggingface 下载方式Modelscope 下载方式 数据集准备模型微调模型训练模型验证及推理模型导出 部署推理vllm 推理Sglang 推理 LLama-facroty 根据git上步骤安装即可&#xff0c;要求的软硬件都装上。 llama-factory运行…