【Axios使用手册】如何使用axios向后端发送请求并进行数据交互

axios 是一个基于 Promise 的 HTTP 客户端,用于浏览器和 Node.js。它支持请求和响应拦截、取消请求、自动转换 JSON 数据等功能,非常适合在现代 JavaScript 应用中进行网络请求。以下是对 axios 的详细讲解,包括安装、基本用法、高级功能等。

1. 安装

你可以通过 npm 或 yarn 来安装 axios

深色版本

npm install axios

或者

深色版本

yarn add axios

2. 基本用法

发送 GET 请求
import axios from 'axios';axios.get('/api/data').then(response => {console.log(response.data); // 打印响应数据}).catch(error => {console.error('请求失败:', error);});
发送 POST 请求
import axios from 'axios';const data = {username: 'example',password: 'password123'
};axios.post('/api/login', data).then(response => {console.log(response.data); // 打印响应数据}).catch(error => {console.error('请求失败:', error);});
发送 PUT 请求
import axios from 'axios';const updatedData = {id: 1,name: 'Updated Name'
};axios.put('/api/resource/1', updatedData).then(response => {console.log(response.data); // 打印响应数据}).catch(error => {console.error('请求失败:', error);});
发送 DELETE 请求
import axios from 'axios';axios.delete('/api/resource/1').then(response => {console.log('删除成功');}).catch(error => {console.error('删除失败:', error);});

3. 配置默认设置

你可以为 axios 设置默认的配置项,例如基础 URL、请求头等。这在多个请求中使用相同的配置时非常有用。

import axios from 'axios';// 设置默认的基础 URL 和请求头
axios.defaults.baseURL = 'https://api.example.com';
axios.defaults.headers.common['Authorization'] = 'Bearer your-token-here';
axios.defaults.headers.post['Content-Type'] = 'application/json';// 现在所有的请求都会使用这些默认设置
axios.get('/data').then(response => {console.log(response.data);}).catch(error => {console.error('请求失败:', error);});

4. 请求和响应拦截器

axios 提供了请求和响应拦截器,可以在请求发送前或响应接收后对数据进行处理。

请求拦截器
import axios from 'axios';axios.interceptors.request.use(config => {// 在发送请求之前做些什么console.log('请求拦截器:', config);return config;},error => {// 对请求错误做些什么return Promise.reject(error);}
);
响应拦截器
import axios from 'axios';axios.interceptors.response.use(response => {// 对响应数据做些什么console.log('响应拦截器:', response);return response;},error => {// 对响应错误做些什么if (error.response) {// 请求已发出,但服务器响应的状态码不在 2xx 范围内console.error('服务器响应错误:', error.response.status);} else {// 某种请求错误(如网络问题)console.error('请求错误:', error.message);}return Promise.reject(error);}
);

5. 取消请求

axios 支持取消请求,这对于长时间运行的请求或用户操作(如页面切换)非常重要。

创建取消令牌
import axios from 'axios';
import CancelToken from 'axios/lib/cancel/CancelToken';const source = CancelToken.source();axios.get('/api/data', {cancelToken: source.token
}).then(response => {console.log(response.data);}).catch(thrown => {if (axios.isCancel(thrown)) {console.log('请求已取消:', thrown.message);} else {// 处理其他类型的错误console.error('请求失败:', thrown);}});// 取消请求
source.cancel('操作被用户取消');

6. 并发请求

axios 提供了 axios.allaxios.spread 方法来并发执行多个请求,并在所有请求完成后处理结果。

import axios from 'axios';function getUserAccount() {return axios.get('/api/account');
}function getUserPermissions() {return axios.get('/api/permissions');
}axios.all([getUserAccount(), getUserPermissions()]).then(axios.spread((account, permissions) => {console.log(account.data, permissions.data);})).catch(error => {console.error('请求失败:', error);});

7. 文件上传

axios 支持文件上传,通常使用 FormData 对象来封装文件和其他表单数据。

import axios from 'axios';const formData = new FormData();
formData.append('file', fileInput.files[0]);
formData.append('description', '文件描述');axios.post('/api/upload', formData, {headers: {'Content-Type': 'multipart/form-data'}
}).then(response => {console.log('文件上传成功:', response.data);}).catch(error => {console.error('文件上传失败:', error);});

8. 使用 Axios 实例

你还可以创建自定义的 axios 实例,以便为不同的 API 设置不同的配置。

import axios from 'axios';const apiClient = axios.create({baseURL: 'https://api.example.com',timeout: 1000,headers: { 'X-Custom-Header': 'foobar' }
});apiClient.get('/data').then(response => {console.log(response.data);}).catch(error => {console.error('请求失败:', error);});

9. 错误处理

axios 的错误对象包含丰富的信息,可以帮助你更好地处理错误。

import axios from 'axios';axios.get('/api/data').then(response => {console.log(response.data);}).catch(error => {if (error.response) {// 服务器响应了一个错误状态码console.error('服务器响应错误:', error.response.status, error.response.data);} else if (error.request) {// 请求已发出,但没有收到响应console.error('请求未收到响应:', error.request);} else {// 其他类型的错误console.error('请求错误:', error.message);}});

10. 使用 TypeScript

如果你使用 TypeScript,axios 提供了类型定义,使得代码更加安全和易于维护。

import axios, { AxiosResponse } from 'axios';interface User {id: number;name: string;
}axios.get<User[]>('/api/users').then((response: AxiosResponse<User[]>) => {console.log(response.data);}).catch(error => {console.error('请求失败:', error);});

总结

axios 是一个强大且灵活的 HTTP 客户端,适用于各种网络请求场景。它支持多种请求方法、配置选项、拦截器、并发请求、文件上传等功能,同时还提供了良好的错误处理机制和 TypeScript 支持。通过合理使用 axios,你可以简化前端与后端之间的通信,提升开发效率和代码质量。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

jvm结构介绍

JVM结构概述 Java虚拟机&#xff08;JVM&#xff09;是Java程序的运行环境&#xff0c;它负责将Java字节码转换为机器码并执行。JVM的结构主要包括类加载子系统、运行时数据区、执行引擎、本地接口以及垃圾收集器。 1. 类加载子系统&#xff08;Class Loader Subsystem&#xf…

Nginx常用配置之详解(Detailed Explanation of Common Nginx Configurations)

Nginx常用配置详解(图文全面总结) Nginx Nginx 是一款轻量级的高性能 HTTP、 和反向代理服务器。 Nginx&#xff0c;被广泛用于负载均衡、静态文件服务、和代理.........等。 Nginx&#xff0c;以高并发、低内存占用、和高可用性著称&#xff0c;大部分的大厂以及公司都在使…

Win11+WLS Ubuntu 鸿蒙开发环境搭建(二)

参考文章 penHarmony南向开发笔记&#xff08;一&#xff09;开发环境搭建 OpenHarmony&#xff08;鸿蒙南向开发&#xff09;——标准系统移植指南&#xff08;一&#xff09; OpenHarmony&#xff08;鸿蒙南向开发&#xff09;——小型系统芯片移植指南&#xff08;二&…

ubuntu 使用s3fs配置自动挂载对象存储

一、环境准备 1.有访问对象存储权限的AKSK 2.服务器、对象存储 二、实施步骤 sudo apt update sudo apt install s3fs echo "AK:SK" >/home/ubuntu/.passwd-s3fs ---位置自定义 chmod 600 /home/ubuntu/.passwd-s3fs ---权限必须要有 mkdir /data sudo s3fs …

聚铭网络受邀参加2024年南京市信息技术应用创新产业供需对接会

近日&#xff0c;备受瞩目的2024年南京市信息技术应用创新产业供需对接会&#xff08;‘宁工品推’信创、商用密码专场&#xff09;”在中国&#xff08;南京&#xff09;软件谷云密城圆满举办。聚铭网络作为信创领域的杰出代表厂商&#xff0c;受邀出席本次大会&#xff0c;为…

关于 AWTK 和 Weston 在旋转屏幕时的资源消耗问题

关于 AWTK 和 Weston 在旋转屏幕时的资源消耗问题&#xff0c;首先需要理解这两者旋转的本质区别及其资源开销。 AWTK的屏幕旋转&#xff1a; AWTK旋转的实现方式&#xff1a; AWTK 是一个用户界面工具包&#xff0c;它通过图形渲染系统处理所有控件和窗口的旋转。当你使用 w…

RS485方向自动控制电路分享

我们都知道RS485是半双工通信&#xff0c;所以在传输的时候需要有使能信号&#xff0c;标明是发送还是接收信号&#xff0c;很多时候就简单的用一个IO口控制就好了&#xff0c;但是有一些低成本紧凑型的MCU上&#xff0c;一个IO口也是很珍贵的&#xff0c;因此&#xff0c;如果…

UE5材质节点Frac/Fmod

Frac取小数 Fmod取余数 转场效果 TimeMultiplyFrac很常用 Timesin / Timecos 制作闪烁效果

图神经网络_GNN从入门到入门

文章目录 0 提出背景1 网络结构2 GNN算法2.1 算法描述2.2 举个栗子 3 GNN本质4 应用领域5 代码案例5.1 PyG的下载5.2 常用数据集介绍5.3 one demo 0 提出背景 经典的深度神经网络适用于 欧几里得数据&#xff08;Euclidean data&#xff09;&#xff0c;比如我们常常用卷积神经…

CDGA数据治理工程师-学习笔记

目录 第一章 数据管理 组织管理数据的目标&#xff1a; 数据管理的原则&#xff1a; 数据生命周期&#xff1a; 数据管理战略的组成应包括&#xff1a; 第二章 数据伦理 目标 数据伦理活动 数据处理伦理问题 贝尔蒙特 数据伦理准则 违背伦理进行数据处理的风险 建立…

AWS K8s 部署架构

Amazon Web Services&#xff08;AWS&#xff09;提供了一种简化的Kubernetes&#xff08;K8s&#xff09;部署架构&#xff0c;使得在云环境中管理和扩展容器化应用变得更加容易。这个架构的核心是AWS EKS&#xff08;Elastic Kubernetes Service&#xff09;&#xff0c;它是…

计算机网络 (16)数字链路层的几个共同问题

一、封装成帧 封装成帧是数据链路层的一个基本问题。数据链路层把网络层交下来的数据构成帧发送到链路上&#xff0c;以及把接收到的帧中的数据取出并上交给网络层。封装成帧就是在一段数据的前后分别添加首部和尾部&#xff0c;构成了一个帧。接收端在收到物理层上交的比特流后…

网页单机版五子棋小游戏项目练习-初学前端可用于练习~

今天给大家分享一个 前端练习的项目&#xff0c;技术使用的是 html css 和javascrpit 。希望能对于 刚刚学习前端的小伙伴一些帮助。 先看一下 实现的效果图 1. HTML&#xff08;HyperText Markup Language&#xff09; HTML 是构建网页的基础语言&#xff0c;它的主要作用是定…

同三维T80004ES H.265高清SDI编码器

1路SDI 1路3.5音频输入,1路SDI环出 产品简介&#xff1a; 同三维T80004ES高标清SDI音视频编码器支持1路高清或1路标清SDI音视频&#xff0c;1路3.5MM独立音频接口采集功能。编码输出双码流H.265/H.264格式&#xff0c;音频 MP3/AAC格式。编码码率可调&#xff0c;画面质量可控制…

教程:从pycharm基于anaconda构建机器学习环境并运行第一个 Python 文件

1. 安装 PyCharm 访问 PyCharm 官方网站&#xff1a;https://www.jetbrains.com/pycharm/。下载社区版&#xff08;免费&#xff09;或专业版&#xff08;收费&#xff0c;提供更多功能&#xff09;。按照操作系统的安装指导安装 PyCharm。安装后打开 PyCharm&#xff0c;并根…

音频进阶学习九——离散时间傅里叶变换DTFT

文章目录 前言一、DTFT的解释1.DTFT公式2.DTFT右边释义1&#xff09; 复指数 e − j ω n e^{-j\omega n} e−jωn2&#xff09;序列与复指数相乘 x [ n ] ∗ e − j ω n x[n]*e^{-j\omega n} x[n]∗e−jωn复指数序列复数的共轭正交正交集 3&#xff09;复指数序列求和 3.DTF…

#渗透测试#红蓝攻防#红队打点web服务突破口总结01

免责声明 本教程仅为合法的教学目的而准备&#xff0c;严禁用于任何形式的违法犯罪活动及其他商业行为&#xff0c;在使用本教程前&#xff0c;您应确保该行为符合当地的法律法规&#xff0c;继续阅读即表示您需自行承担所有操作的后果&#xff0c;如有异议&#xff0c;请立即停…

25年1月更新。Windows 上搭建 Python 开发环境:PyCharm 安装全攻略(文中有安装包不用官网下载)

python环境没有安装的可以点击这里先安装好python环境&#xff0c;python环境安装教程 安装 PyCharm IDE 获取 PyCharm PyCharm 提供两种主要版本——社区版&#xff08;免费&#xff09;和专业版&#xff08;付费&#xff09;。对于初学者和个人开发者而言&#xff0c;社区…

JavaScript中Map与Object的区别

在JavaScript中&#xff0c;Map和Object是用于存储键值对数据的两种不同的数据结构&#xff08;Map是ES6新增的数据结构&#xff09;&#xff0c;它们在构造方式、键的类型以及原型继承等方面存在区别。 一、主要区别 1.构造方式 Map&#xff1a;Map只能通过构造函数new Map…

双目视觉:reprojectImageTo3D函数

前言 reprojectImageTo3D 是 OpenCV 中用于从视差图生成三维点云的函数。它的原理是利用视差图和相机的校准参数&#xff0c;通过三角测量法&#xff0c;计算每个像素对应的三维坐标。以下内容根据源码分析所写&#xff0c;觉得可以的话&#xff0c;点赞收藏哈&#xff01;&am…