掌握axios与Vue 3:构建高效HTTP请求的终极指南

引言

axios作为一个广泛使用的JavaScript库,因其简洁的API、强大的功能和良好的浏览器兼容性,成为了许多前端开发者在Vue 3项目中的首选。

 axios简介

axios是什么?

axios是一个基于Promise的HTTP客户端,用于浏览器和node.js环境中。它允许开发者以一种简洁的方式发送异步HTTP请求到REST endpoints,并处理响应。axios支持请求和响应拦截器、自动转换JSON数据、客户端支持防御XSRF等特性。

axios的主要特点和优势
  • 基于Promise:axios使用Promise,这是现代JavaScript中处理异步操作的标准方式。
  • 浏览器和Node.js兼容:axios可以在前端和后端环境中使用,方便前后端代码共享。
  • 请求和响应拦截器:可以添加拦截器来处理请求或响应,例如添加认证令牌、日志记录等。
  • 自动转换JSON数据:axios会自动将JSON字符串转换为JavaScript对象,反之亦然。
  • 支持请求取消:可以取消正在进行的请求。
  • 支持请求和响应的配置:可以对请求和响应进行详细的配置,如超时设置、自定义HTTP头等。
axios的基本使用方法(GET、POST请求示例)

GET请求示例

// 使用axios发送GET请求
axios.get('https://api.example.com/data').then(function (response) {// 处理成功情况console.log(response.data);}).catch(function (error) {// 处理错误情况console.error(error);});

POST请求示例

// 使用axios发送POST请求
axios.post('https://api.example.com/data', {firstName: 'Fred',lastName: 'Flintstone'}).then(function (response) {// 处理成功情况console.log(response.data);}).catch(function (error) {// 处理错误情况console.error(error);});

在这些示例中,我们使用了axios的.get().post()方法来发送GET和POST请求。每个方法都返回一个Promise对象,该对象在请求成功时解决,并在请求失败时拒绝。通过.then().catch()方法,我们可以处理成功的响应和错误情况。

这些基本的使用方法是axios的核心,通过它们,开发者可以轻松地在Vue 3应用中实现与后端服务的交互。

安装和配置axios

1.使用npm安装axios:

npm install axios

2.或者使用yarn安装axios:

yarn add axios

3.同样可以通过pnpm来安装axios。但是我们首先确保项目中已经安装了pnpm。如果还没有安装,可以通过npm或yarn来安装pnpm:

npm install -g pnpm

或者

yarn global add pnpm

安装完成后,你可以使用pnpm来安装axios:

pnpm add axios

实战阶段

我们可以将封装好的HTTP请求模块命名为request.js,并使用request作为导入的别名。以下是创建一个名为request.js的封装好的HTTP请求模块的示例:

// request.js
import axios from 'axios';// 创建axios实例
const service = axios.create({baseURL: process.env.VUE_APP_BASE_API, // API的基础URLtimeout: 5000 // 请求超时时间
});// 请求拦截器
service.interceptors.request.use(config => {// 在这里可以添加一些请求前的操作,例如添加tokenreturn config;},error => {// 请求错误处理console.error('Request Error:', error);return Promise.reject(error);}
);// 响应拦截器
service.interceptors.response.use(response => {// 对响应数据做点什么return response.data;},error => {// 响应错误处理console.error('Response Error:', error);return Promise.reject(error);}
);export default service;

然后,在你的Vue 3组件中,你可以通过导入上面创建的request.js模块来发送HTTP请求:

// MyComponent.vue
<script setup>
import { ref } from 'vue';
import request from './request'; // 假设request.js位于同一目录下const fetchData = async () => {try {const response = await request.get('/some-endpoint');// 处理响应数据console.log(response);} catch (error) {// 处理错误console.error('Error fetching data:', error);}
};// 调用fetchData以获取数据
fetchData();
</script>

在这个示例中,我们使用request作为导入的别名,这样在调用请求方法时,代码更加简洁明了。通过这种方式,你可以轻松地在多个组件中重用HTTP请求逻辑,同时保持代码的清晰和组织性。此外,你还可以根据需要进一步封装更多的请求方法(如POST、PUT、DELETE等),以及添加更多的配置和错误处理逻辑。

请求和响应拦截器的高级配置(以pinia为例子)

在Pinia中获取token

首先,确保您已经在Pinia中定义了相应的store,并且该store中包含了token。例如:

// stores/auth.js
import { defineStore } from 'pinia';export const useAuthStore = defineStore('auth', {state: () => ({token: null,}),actions: {setToken(newToken) {this.token = newToken;localStorage.setItem('token', newToken);},removeToken() {this.token = null;localStorage.removeItem('token');},},
});

然后,在请求拦截器中,您可以从Pinia的store中获取token并添加到请求头中:

// request.js
import axios from 'axios';
import { useAuthStore } from '../stores/auth'; // 假设您的Pinia store文件位于此路径const service = axios.create({baseURL: process.env.VUE_APP_BASE_API,timeout: 5000,
});service.interceptors.request.use(config => {const authStore = useAuthStore();const token = authStore.token;if (token) {config.headers['Authorization'] = `Bearer ${token}`;}return config;},error => {console.error('Request Error:', error);return Promise.reject(error);}
);export default service;

在响应拦截器中进行数据转换、错误重试等操作

响应拦截器可以用来处理服务器返回的数据,例如转换数据格式或处理特定的错误。以下是如何在响应拦截器中进行数据转换和错误重试的示例:

// request.js
// ...之前的代码service.interceptors.response.use(response => {// 假设服务器返回的数据格式为JSON,且包含data字段const data = response.data;// 可以根据需要对数据进行转换或处理return data;},error => {// 响应错误处理// 例如,如果响应状态码为401(未授权),则可能需要重新登录if (error.response && error.response.status === 401) {// 重定向到登录页面router.push('/login');}// 如果响应状态码为429(请求过多),则可以进行错误重试if (error.response && error.response.status === 429) {// 重试逻辑console.log('Request was rate limited, retrying...');// 可以在这里实现重试逻辑,例如使用递归调用或使用第三方库}return Promise.reject(error);//这行代码的意思是返回一个被拒绝的Promise对象,并将error作为拒绝的原因}
);export default service;

资料推荐

1.axios官方文档:Axios中文文档 | Axios中文网

2.Vue.js官方文档:https://cn.vuejs.org/

3.Pinia官方文档:Pinia | The intuitive store for Vue.js

总结

axios是一个功能强大的HTTP客户端库,它使用Promise来处理异步请求,非常适合在Vue 3项目中使用

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

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

相关文章

UI设计工具选择指南:Sketch、XD、Figma、即时设计

在数字产品设计产业链中&#xff0c;UI设计师往往起着连接前后的作用。产品经理从一个“需求”开始&#xff0c;制定一个抽象的产品概念原型。UI设计师通过视觉呈现将抽象概念具体化&#xff0c;完成线框图交互逻辑视觉用户体验&#xff0c;最终输出高保真原型&#xff0c;并将…

鸿蒙开发:Universal Keystore Kit(密钥管理服务)【HMAC(C/C++)】

HMAC(C/C) HMAC是密钥相关的哈希运算消息认证码&#xff08;Hash-based Message Authentication Code&#xff09;&#xff0c;是一种基于Hash函数和密钥进行消息认证的方法。 在CMake脚本中链接相关动态库 target_link_libraries(entry PUBLIC libhuks_ndk.z.so)开发步骤 生…

对接高德开放平台API

高德开放平台API&#xff1a; https://lbs.amap.com/ 一、天气查询 天气查询: https://lbs.amap.com/api/webservice/guide/api/weatherinfo adcode城市码表下载: https://lbs.amap.com/api/webservice/download Component public class WeatherUtil {Resourceprivate GdCon…

使用F1C200S从零制作掌机之USB游戏手柄

一、USB手柄 COIORVIS PC游戏手柄电脑USB FC模拟器经典游戏手柄 安卓手机有线连接单打格斗对打拳皇 经典有线手柄【黄色】 https://item.jd.com/10046453175183.html 插入USB即可自动识别。 # [ 1425.447643] usb 1-1: USB disconnect, device number 7 [ 1427.072155] usb …

43、nginx的优化、防盗链、重定向、代理

nginx的优化、防盗链、重定向、代理 一、nginx的优化 1.1、隐藏版本号 server_tokens off;隐藏版本号 [roottest1 conf]# vim nginx.confserver_tokens off;[roottest1 conf]# nginx -t nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok ngin…

如何用脉购CRM健康档案管理系统显著提升用户粘性与忠诚度

如何用脉购CRM健康档案管理系统显著提升用户粘性与忠诚度 脉购CRM健康档案管理系统以其创新的健康管理理念和先进的技术手段&#xff0c;为医疗机构和用户之间建立了一座高效的沟通桥梁。通过该系统&#xff0c;用户的健康档案得到了全面而细致的管理&#xff0c;不仅提高了医…

【Mark笔记】基于Centos7.7更改SSH端口重启服务报错

0x0 场景描述 RT&#xff0c;更改默认端口22为2276后直接重启服务报错&#xff1a; 查看报错内容&#xff0c;如下&#xff1a; 0x1 相关操作 关闭selinux &#xff08;未重启&#xff09;本地防火墙端口放行tcp 2276端口更改回22端口服务可以正常启动sshd -t 检查配置并未…

前端--第一个前端程序

第一个前端程序 第一步&#xff1a; 使用记事本&#xff0c;编写代码 在你的一个磁盘里面创建一个文件夹&#xff0c;名为前端&#xff0c;然后在里面新建一个记事本&#xff0c;在里面写如下代码&#xff0c;注意一定要使用英文&#xff0c;然后把后缀名称改为.html。 第二…

VMware虚拟机使用标准分区后对分区进行扩容

前言&#xff1a; 使用虚拟机创建系统后&#xff0c;/ 盘 想要扩容需要几步才能实现&#xff0c;下面将介绍具体流程 确定根分区磁盘以及分区号&#xff0c;和起始扇区和结束扇区 # 查看磁盘名称和分区 # 如下可看出根分区为 /dev/sda2 &#xff0c;磁盘为sda [root192 ~]# ls…

# Redis 入门到精通(一)数据类型(3)

Redis 入门到精通&#xff08;一&#xff09;数据类型&#xff08;3&#xff09; 一、redis 数据类型–set 类型介绍与基本操作 1、set 类型 新的存储需求: 存储大量的数据&#xff0c;在查询方面提供更高的效率。需要的存储结构: 能够保存大量的数据&#xff0c;高效的内部…

redis相关知识记录

redis基本数据类型 Redis⽀持五种主要数据结构&#xff1a;字符串&#xff08;Strings&#xff09;、列表&#xff08;Lists&#xff09;、哈希表&#xff08;Hashes&#xff09;、集合&#xff08;Sets&#xff09;和有序集合&#xff08;Sorted Sets&#xff09;。这些数据结…

UnityHub 无法添加模块问题

文章目录 1.问题描述2.问题解决 1.问题描述 在Hub中无法添加模块 2.问题解决 1、点击设置 2、设置版本安装位置 可以发现installs的安装位置路径设置不是unity安装位置&#xff0c;这里我们更改成自己电脑unity安装位置的上一级路径 添加模块正常&#xff1a;

aws sap认证考试如何轻松通过

如何高效备考AWS SAP (Solutions Architect Professional) 认证? AWS SAP认证是AWS认证体系中难度最高的认证之一,要通过这个考试确实需要下一番功夫。但通过合理规划和有效准备,你可以提高通过的几率。以下是一些建议: 评估起点 首先诚实地评估自己的AWS知识水平和实践经验。…

three完全开源扩展案例02-跳动的音乐

更多案例尽在https://threelab.cn/ 演示地址 import * as THREE from "three"; import { OrbitControls } from "three/examples/jsm/controls/OrbitControls.js";let mediaElement; let analyser; let scene; let camera; let renderer; let controls; …

STM32中断(NVIC和EXIT)

CM3 内核支持 256 个中断&#xff0c;其中包含了 16 个内核中断和 240个外部中断&#xff0c;并且具有 256 级的可编程中断设置。但STM32 并没有使用CM3内核的全部东西&#xff0c;而是只用了它的一部分。STM32有 76 个中断&#xff0c;包括16 个内核中断和 60 个可屏蔽中断&am…

Codeforces Round 954 (Div. 3)(A~D题)

A. X Axis 思路: 1~10暴力枚举一下所有可能 代码: #include<bits/stdc.h> using namespace std; #define N 1000005 typedef long long ll; typedef unsigned long long ull; ll n, m, t, h, k; ll a, b, c; ll ans, num, sum, cnt; ll temp[N], f1[N], f2[N]; bool f…

无头单向非循环链表实现 and leetcode刷题

无头单向非循环链表实现 1. 单链表的模拟实现IList.java接口&#xff1a;MySingleList.java文件&#xff1a; 2. leetcode刷题2.1 获取链表的中间节点2.2 删除链表中所有值为value的元素2.3 单链表的逆置2.4 获取链表倒数第k个节点2.5 给定 x, 把一个链表整理成前半部分小于 x,…

java使用easypoi模版导出word详细步骤

文章目录 第一步、引入pom依赖第二步、新建导出工具类WordUtil第三步、创建模版word4.编写接口代码5.导出结果示例 第一步、引入pom依赖 <dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-spring-boot-starter</artifactId><…

AutoMQ vs Kafka: 来自小红书的独立深度评测与对比

测试背景 当前小红书消息引擎团队与 AutoMQ 团队正在深度合作&#xff0c;共同推动社区建设&#xff0c;探索云原生消息引擎的前沿技术。本文基于 OpenMessaging 框架&#xff0c;对 AutoMQ 进行了全面测评。欢迎大家参与社区并分享测评体验。 01 测试结论 本文主要测评云…

Elon Musk开源Grok

转载自&#xff1a;AILab基地 早在6天前&#xff0c;马斯克就发文称xAI将开源Grok 图片 13小时前&#xff0c;马斯克开源了旗下公司X的Grok训练模型&#xff0c;并喊话OpenAI&#xff0c;你名字里的Open到底在哪里 图片 下面是xai-org的GitHub开源地址[https://github.com/x…