一文带你理清Axios的有关问题

devtools/2024/10/11 13:21:44/
htmledit_views">

前言

我们对于Axios并不陌生,每天我们都在使用它。

Axios 是一个基于 Promise 的 HTTP 客户端,主要用于发送 HTTP 请求。它能够简化与服务器进行通信的过程,比如发送 GET、POST、PUT、DELETE 等请求。

接下来我先介绍他的几个使用方法,也就是我们平常用的几个请求方法。

这里指的是单独配置的请求:

1.GET

html" title=javascript>javascript">axios.get('https://api.example.com/users').then(response => {console.log(response.data); // 输出服务器返回的用户数据}).catch(error => {console.error('Error:', error); // 处理错误});

同时,你也可以加上自己的 params 选项传递。

html" title=javascript>javascript">axios.get('https://api.example.com/users', {params: {id: 123  // 传递查询参数}
}).then(response => {console.log(response.data);});

2.POST

html" title=javascript>javascript">axios.post('https://api.example.com/users', {name: 'John',age: 30
}).then(response => {console.log(response.data); // 返回新创建的用户数据}).catch(error => {console.error('Error:', error);});

3.PUT

html" title=javascript>javascript">axios.put('https://api.example.com/users/123', {name: 'John Doe',age: 31
}).then(response => {console.log(response.data); // 返回更新后的用户数据}).catch(error => {console.error('Error:', error);});

4.DELETE

html" title=javascript>javascript">axios.delete('https://api.example.com/users/123').then(response => {console.log('User deleted');}).catch(error => {console.error('Error:', error);});

5.all

最后这一个不是请求方法,我也是最近看文档才知道,但是不是很难,只是才知道也可以这样用,我们都知道Promise.all()这个方法,是用来做并发的,这个其实也是同样的作用。用法如下:

html" title=javascript>javascript">axios.all([axios.get('/data1'),axios.get('/data2')
])
.then(axios.spread((response1, response2) => {console.log('Data 1:', response1.data);console.log('Data 2:', response2.data);
}));

6. (Async/Await)搭配使用

Axios和async/await非常搭配,可以让异步代码变得更清晰。

html" title=javascript>javascript">async function fetchData() {try {const response = await axios.get('https://api.example.com/data');console.log(response.data);} catch (error) {console.error('Error:', error);}
}fetchData();

以上呢就是我们单独配置请求时候使用的几个方法吧,只适用我们做一些调研或者学习使用的。但是在我们的项目中,我们都是需要封装Axios请求的。

7.Axios请求封装

首先我给大家先说一下我的思路:

        1.创建Axios的实例:设置基础配置

        2.添加请求拦截器:可以在请求发送之前做一些操作,如添加认证Token

        3.添加响应拦截器:可以在响应返回时全局做一些错误处理或者数据处理

接下来看代码,只是看思路

html" title=javascript>javascript">import axios from 'axios';// 1. 创建 Axios 实例
const service = axios.create({baseURL: 'https://api.example.com', // API的基础URLtimeout: 5000, // 请求超时的时间headers: {'Content-Type': 'application/json'}
});// 2. 请求拦截器
service.interceptors.request.use(config => {// 在发送请求之前做些什么,例如添加 tokenconst token = localStorage.getItem('token');if (token) {config.headers['Authorization'] = `Bearer ${token}`; // 携带 token}return config;},error => {// 请求错误处理return Promise.reject(error);}
);// 3. 响应拦截器
service.interceptors.response.use(response => {// 处理响应数据const res = response.data;if (res.code !== 200) {  // 假设后端返回的状态码为200表示成功console.error(res.message || 'Error');return Promise.reject(new Error(res.message || 'Error'));} else {return res;  // 返回成功的数据}},error => {// 处理响应错误,比如 token 过期、网络错误等console.error('Error: ' + error.message);return Promise.reject(error);}
);// 导出封装的实例
export default service;

那么我们在接下来就可以使用这个文件,在api.js文件中

html" title=javascript>javascript">import service from './request'; // 引入封装好的模块// 登录
export function userLogin(data) {return service.post('/login', data)
}

那么在组件中我们需要引入就行了,然后再去这样使用

html" title=javascript>javascript"><script setup>
import { ref } from 'vue';
import { userLogin } from './api'; // 引入封装好的API// 定义响应式变量
const username = ref('');
const password = ref('');
const error = ref(null);// 处理登录请求的函数
const handleLogin = async () => {error.value = null; // 重置错误信息const loginData = {username: username.value,password: password.value};try {// 使用 async/await 调用登录请求const response = await userLogin(loginData);console.log('Login success:', response); // 登录成功后的处理// 在这里可以进行页面跳转或保存 token} catch (err) {console.error('Login failed:', err);error.value = 'Login failed. Please check your credentials and try again.'; // 显示错误信息}
};
</script>


http://www.ppmy.cn/devtools/111453.html

相关文章

卷积神经网络与小型全连接网络在MNIST数据集上的对比

卷积神经网络&#xff08;CNN&#xff09; 深度卷积神经网络中&#xff0c;有如下特性 很多层&#xff08;Compositionality&#xff0c;组合性&#xff09;: 深度卷积神经网络通常由多层卷积和非线性激活函数组成。这种多层结构使得网络能够逐步提取和组合低层次的特征&…

跨境电商代购独立站建构搭建技术分享:功能模块选购+需求功能定制

在跨境电商领域&#xff0c;独立站已成为越来越多代购商家的重要选择。独立站不仅能帮助商家摆脱第三方平台的限制&#xff0c;还能更好地掌握客户数据&#xff0c;提升品牌价值和利润空间。本文将详细介绍跨境电商代购独立站的建构与搭建技术&#xff0c;为相关从业者提供实用…

深入探讨 Flannel 技术:性能、缺陷与优点

深入探讨 Flannel 技术&#xff1a;性能、缺陷与优点 Flannel&#xff0c;是一种常见 CNI&#xff08;Container Network Interface&#xff09;插件本文将探讨 Flannel 的性能表现和优缺点。 性能得失 Flannel 通过在每个节点上创建一个子网来实现容器之间的网络通信&…

建筑物检测系统源码分享

建筑物检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Visio…

医护人员排班系统:Spring Boot技术的应用策略

3系统分析 3.1可行性分析 通过对本医护人员排班系统实行的目的初步调查和分析&#xff0c;提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本医护人员排班系统采用Spring Boot框架&#xff0c;JAVA作…

职业技能大赛背景下的移动互联网应用软件开发(Android)实训室建设方案

一、建设背景 随着科技的持续进步&#xff0c;移动设备已成为人们日常生活中不可或缺的一部分。据相关数据&#xff0c;移动互联网的使用率在近年来显著上升。在这样的背景下&#xff0c;移动互联技术不仅推动了科技的发展&#xff0c;也渗透到了智能家居、车联网、工业自动化…

若依漏洞综合利用工具

若依漏洞综合利用工具 安装与使用 该工具使用java开发&#xff0c;环境要求&#xff1a;JDK1.8版本 java -jar “文件名” 即可打开图形化界面。 注意查看"必看操作说明"模块。 1.首先下载好几个必要模块。 然后把openjfx-17.0.11_windows-x64_bin-sdk放在D盘根…

车辆检测与分类系统源码分享

车辆检测与分类检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer V…