当前位置: 首页 > news >正文

详细讲解axios封装与api接口封装管理

一、axios封装

axios是基于promise的http客户端,用于浏览器和nodejs发送http请求 ,对它进行封装主要是为了统一管理请求配置和处理请求和响应的通用逻辑等。以下是常用的封装逻辑和要点

1:引入axios相关依赖

首先引用项目中的axios库,在nodejs项目中通常使用require语句,在基于现代js模块系统(如ES Module)的前端项目中则使用import来引入。实例如下

import axios from 'axios'
//如果需要先处理环境变量等,可以引入相关模块,比如在Node.js中引入process模块来获取环境相关配置
// const process = require('process');

2:创建axios实例

直接使用axios的默认配置有时候不能满足项目需求,所以通常会创建一个axios实例,并在实例上配置一些通用的请求设置,比如基础URL,请求超时时间,请求头信息。示例代码如下

const severce = axios.create({baseURL: process.env.VUE_APP_BASE_API || '/api',  // 可以从环境变量获取基础URL,如果没有则使用默认的'/api',常用于根据不同环境(开发、生产等)切换后端接口地址timeout: 5000,  // 设置请求超时时间为5000毫秒(5秒),避免长时间无响应的请求一直挂起headers: {'Content-Type': 'application/json'  // 设置默认的请求头内容类型,根据实际项目后端要求可调整,比如也可能是'application/x-www-form-urlencoded'等}
})

3:请求拦截设置

请求拦截可以在每个请求发送前执行一些逻辑,常见的比如添加鉴权token到请求头中,显示加载动画等,示例代码如下:

instance.interceptors.request.use(config => {const token = localStorage.getItem('token');  // 从本地存储获取token,实际可能根据项目的登录认证机制来获取if (token) {config.headers.Authorization = `Bearer ${token}`;  // 将token添加到请求头的Authorization字段,格式可能根据后端要求调整}// 这里也可以添加代码显示加载动画,比如使用一些UI库提供的加载组件来控制显示隐藏return config;},error => {return Promise.reject(error);  // 如果请求拦截出现错误,直接返回被拒绝的Promise,将错误传递下去}
);

4:响应拦截设置

响应拦截器用于在收到服务器响应后统一处理相关逻辑,例如根据响应状态码判断请求是否成功,处理业务错误提示,隐藏加载动画等,示例代码如下:

instance.interceptors.response.use(response => {// 可以在这里隐藏加载动画,和请求拦截器中显示加载动画配合使用const { data, status } = response;if (status === 200) {  // 根据项目实际的成功状态码判断,这里假设200表示成功return data;} else {// 如果状态码不是200,可以在这里统一处理错误,比如弹出提示框等,然后返回一个被拒绝的Promisereturn Promise.reject(new Error('请求失败'));}},error => {// 处理响应出现的网络错误等情况,比如断网、服务器内部错误等,同样可以弹出错误提示,返回被拒绝的Promisereturn Promise.reject(error);}
);

5:导出封装后的axios实例

最后将封装好的axios实例导出,以便在项目其他地方可以方便的使用它来发送请求,示例代码如下:

export default instance;

二、api 接口封装管理

在完成axios封装后,通常还会对项目的各个api接口,进行进一步的封装管理,这样做的好处是让接口调用更加清晰,易于维护和扩展,并且可以将接口相关的业务逻辑整合到一起

1:创建api文件模块

一般会按照功能模块或者业务模块来创建对应的api文件,

例如在一个电商项目中,可能有user.js用于管理用户的相关接口,product.js用于管理商品相关接口等。以 user.js 为例,示例代码如下:

import instance from '@/axio(axios的路径)'  // 引入封装好的axios实例// 用户登录接口封装
export const login =(params传递过来的参数)=>{// 发送POST请求到/user/login路径,params为传递给后端的登录参数,返回的是一个Promise,方便        在调用处使用.then()和.catch()处理结果和错误return instance.post('接口路径',params)}// 获取用户信息接口封装
export const getUserInfo =(params传递过来的参数)=>{// 发送GET请求获取用户信息,同样返回Promisereturn instance.post('接口路径',params)}

2:整合api接口

可以创建一个统一的api目录,将各个api的文件放在里面,然后创建一个index.js文件(或者其他合适的整合文件名称)来统一导出所有的接口函数,方便在项目的其他地方(比如组件中)一次性引入使用。示例代码如下:

import { login } from './user';
import { getProductList } from './product';export default {login,getProductList
};

3:在组件等地方使用封装后的api接口

在 Vue 组件或者其他 JavaScript 模块中使用封装后的 API 接口时,代码会变得简洁且逻辑清晰,示例如下(以 Vue 组件为例):

<template><div><button @click="handleLogin">登录</button></div>
</template><script>
import api from '@/api';  // 引入整合后的api接口export default {methods: {async handleLogin() {const params = { username: 'test', password: '123456' };try {const result = await api.login(params);  // 调用登录接口,使用await等待异步结果console.log('登录成功', result);// 可以在这里进行后续操作,比如保存登录信息、跳转到其他页面等} catch (error) {console.log('登录失败', error);// 处理登录失败的情况,比如弹出提示框等}}}
};
</script>

通过对 axios 进行封装以及进一步对 api 接口进行封装管理,能够让项目中的 HTTP 请求处理更加规范、高效,便于不同开发人员协作以及后续项目的维护和扩展。同时,也能更好地处理请求和响应过程中的各种业务逻辑和异常情况。

相关文章:

详细讲解axios封装与api接口封装管理

一、axios封装 axios是基于promise的http客户端&#xff0c;用于浏览器和nodejs发送http请求 &#xff0c;对它进行封装主要是为了统一管理请求配置和处理请求和响应的通用逻辑等。以下是常用的封装逻辑和要点 1&#xff1a;引入axios相关依赖 首先引用项目中的axios库&…...

API 接口如何确保数据的安全?

在API接口的对接中&#xff0c;确保数据的安全性是至关重要的。以下是一些关键措施&#xff0c;可以帮助实现这一目标&#xff1a; 一、认证与授权 API密钥&#xff1a;为每个调用方分配唯一的API密钥&#xff0c;客户端在请求时携带该密钥&#xff0c;服务器端验证其有效性。…...

HAL库STM32硬件IIC驱动数字电位器MCP4017

目录 一、芯片特性 二、硬件电路 三、工程搭建 四、IIC硬件地址 五、驱动程序 项目需要&#xff0c;最近用到了一个IIC接口的数字电位器&#xff0c;型号&#xff1a;MCP4017T-502E。对应阻值5K&#xff0c;使用STM32G030F6的硬件IIC驱动&#xff0c;发现简单的不得了&…...

「地平线」副总裁余轶南与「理想汽车」智驾产品总监赵哲伦联手创业,入局具身智能赛道!

小编早期文章&#xff1a;智驾领域从业者&#xff0c;疯狂涌入人形机器人赛道&#xff01;就有提到智驾领域从业者入局人形机器人赛道是趋势并分析原因。 之前媒体报道的智驾芯片上市公司【地平线】创始成员、副总裁、前软件平台产品线总裁余轶南&#xff08;博士&#xff09;…...

弹性盒子(display: flex)布局超全讲解|Flex 布局教程

文章目录 弹性盒子flex什么是弹性布局&#xff1f;弹性布局的特点&#xff1f;justify-contentalign-itemflex-direction (主轴的方向&#xff1a;水平或者垂直)flex-wrapflex-flowalign-contentflex-grow 属性flex-shrink 属性flex-basis 属性flex 属性align-self 属性 弹性盒…...

无问社区-无问AI模型

无问AI模型是无问社区新上线的一款AI功能&#xff0c;支持文本图像的输入&#xff0c;在文本理解能力、推理能力、视觉能力上相较于“社区助手”有了很大的提升。 我们在预训练模型的技术上增加1.7亿token的训练数据进行强化训练使其具备更好的效果。 更好的消息是我们准备了…...

如何记录日常笔记

如何使用Obsidian来记录日常的笔记吗&#xff1f;比如会议记录、读书笔记。 我认为&#xff0c;首先需要做好的就是建立一个单独的分类&#xff0c;比如设置会议记录的文件夹、读书笔记的文件夹&#xff0c;这样各个笔记相互不干扰。 而做日常记录&#xff0c;和我们进行卡片…...

【魅力golang】之-反射

1、引言 反射&#xff08;Reflection&#xff09;在 Golang中用于运行时检查和操作变量的类型和值。通过反射&#xff0c;可以实现动态类型处理&#xff0c;这在构建泛型代码、框架、序列化工具和动态代理等场景中非常有用。 2、什么是反射 反射是指程序在运行时能够动态地检…...

git--批量修改本地用户名和邮箱

原文网址&#xff1a;git--批量修改本地用户名和邮箱-CSDN博客 简介 本文介绍git如何批量修改项目的本地用户名和邮箱。 脚本 新建脚本&#xff1a;git_config.sh&#xff0c;内容如下&#xff1a; #!/bin/bash topDirpwd echo "开始处理" for file in ls ./ do…...

Rofin罗芬激光PowerLine L300 PL400 Manual 软件

Rofin罗芬激光PowerLine L300 PL400 Manual 软件...

【 thefuck 安装与使用】Linux 终端自动纠错工具:一头GitHub上的“草泥马“ - thefuck,妈妈再也不用担心我打错命令行了!

目录 快速安装使用 . 1.简介 2.安装 3.配置 4.补充 官方盗料参考 快速安装使用 快速安装使用&#xff0c;四步即可&#xff1a; #Ubuntu/Debian系统 sudo apt update sudo apt install python3-dev python3-pip sudo pip3 install thefuck #编辑bashrc配置文件 vim ~/.bashrc…...

牛客网刷题 ——C语言初阶——BC112小乐乐求和

1.牛客网刷题 ——C语言初阶 牛客网&#xff1a;BC112小乐乐求和 小乐乐最近接触了求和符号Σ&#xff0c;他想计算的结果。但是小乐乐很笨&#xff0c;请你帮助他解答。 输入描述: 输入一个正整数n (1 ≤ n ≤ 109) 输出描述: 输出一个值&#xff0c;为求和结果。 示例1 输…...

【PyTorch】(基础七)---- 完整训练流程

首先要明确一点&#xff0c;我们在编写模型、训练和使用模型的时候通常都是分开的&#xff0c;所以应该把Module的编写以及train方法和test方法分开编写。 调用gpu进行训练&#xff1a;在网络模型&#xff0c;数据&#xff0c;损失函数对象后面都使用.cuda&#xff08;&#x…...

01- 三自由度串联机械臂位置分析

三自由度串联机械臂如下图所示&#xff08;d180mm&#xff0c;L1100mm&#xff0c;L280mm&#xff09;&#xff0c;利用改进DH法建模&#xff0c;坐标系如下所示&#xff1a; 利用改进DH法建模&#xff0c;该机器人的DH参数表如下所示&#xff1a; 对该机械臂进行位置分析&…...

Flutter实现可拖拽操作Draggable

文章目录 1. Draggable 控件的构造函数主要参数&#xff1a; 2. Draggable 的工作原理3. 常见用法示例 1&#xff1a;基本的拖拽控件解释&#xff1a;示例 2&#xff1a;与 DragTarget 配合使用解释&#xff1a; 4. Draggable 的回调详解5. 总结 Draggable 是 Flutter 中一个用…...

Vue BPMN Modeler流程图

1、参考地址 git clone https://github.com/evanyangg/vue-bpmn-modeler.git 2、安装bpmn.js npm install bpmn-js --save 3、使用bpmn.js <template><div class"containers"><div class"canvas" ref"canvas"></div&g…...

写在公司40周年前夕

日子太快了&#xff0c;来这里工作六年多了。现在才知道原来入职的公司只是母公司的一小点。刚来一年就碰到疫情&#xff0c;三年疫情之后就迎来亏损&#xff0c;而后就是变了董事长&#xff0c;换了总经理。 这圣诞前&#xff0c;所有的子分又换了一把手。动作之大&#xff0c…...

Python调用Elasticsearch更新数据库

文章目录 Elasticsearch介绍Python调用Elasticsearch更新数据库 Elasticsearch介绍 Elasticsearch是一个基于Lucene的搜索引擎&#xff0c;它提供了一个分布式、多租户能力的全文搜索引擎&#xff0c;具有HTTP web接口和无模式的JSON文档。Elasticsearch是用Java开发的&#x…...

测试基础之测试分类

软件测试是确保软件产品满足预期功能、性能和用户体验要求的关键环节。它的主要目的是通过系统化的方法发现并修复软件中的缺陷&#xff0c;从而提高软件的质量和可靠性。在软件开发生命周期的不同阶段执行测试&#xff0c;以尽早发现潜在的错误或类型&#xff0c;早期发现缺陷…...

太阳能LED路灯智能控制系统(论文+源码)

1系统的功能及方案设计 本次课题为太阳能LED路灯智能控制系统&#xff0c;其系统整体架构如图2.1所示&#xff0c;太阳能板通过TP4056充电模块给锂电池进行充电&#xff0c;电池通过HX3001升压模块进行升压到5V给整个控制系统进行供电&#xff0c;控制系统由AT89C52单片机作为…...

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周&#xff0c;有很多同学在写期末Java web作业时&#xff0c;运行tomcat出现乱码问题&#xff0c;经过多次解决与研究&#xff0c;我做了如下整理&#xff1a; 原因&#xff1a; IDEA本身编码与tomcat的编码与Windows编码不同导致&#xff0c;Windows 系统控制台…...

linux之kylin系统nginx的安装

一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源&#xff08;HTML/CSS/图片等&#xff09;&#xff0c;响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址&#xff0c;提高安全性 3.负载均衡服务器 支持多种策略分发流量…...

什么是Ansible Jinja2

理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具&#xff0c;可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板&#xff0c;允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板&#xff0c;并通…...

html-<abbr> 缩写或首字母缩略词

定义与作用 <abbr> 标签用于表示缩写或首字母缩略词&#xff0c;它可以帮助用户更好地理解缩写的含义&#xff0c;尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时&#xff0c;会显示一个提示框。 示例&#x…...

rnn判断string中第一次出现a的下标

# coding:utf8 import torch import torch.nn as nn import numpy as np import random import json""" 基于pytorch的网络编写 实现一个RNN网络完成多分类任务 判断字符 a 第一次出现在字符串中的位置 """class TorchModel(nn.Module):def __in…...

uniapp 开发ios, xcode 提交app store connect 和 testflight内测

uniapp 中配置 配置manifest 文档&#xff1a;manifest.json 应用配置 | uni-app官网 hbuilderx中本地打包 下载IOS最新SDK 开发环境 | uni小程序SDK hbulderx 版本号&#xff1a;4.66 对应的sdk版本 4.66 两者必须一致 本地打包的资源导入到SDK 导入资源 | uni小程序SDK …...

nnUNet V2修改网络——暴力替换网络为UNet++

更换前,要用nnUNet V2跑通所用数据集,证明nnUNet V2、数据集、运行环境等没有问题 阅读nnU-Net V2 的 U-Net结构,初步了解要修改的网络,知己知彼,修改起来才能游刃有余。 U-Net存在两个局限,一是网络的最佳深度因应用场景而异,这取决于任务的难度和可用于训练的标注数…...

echarts使用graphic强行给图增加一个边框(边框根据自己的图形大小设置)- 适用于无法使用dom的样式

pdf-lib https://blog.csdn.net/Shi_haoliu/article/details/148157624?spm1001.2014.3001.5501 为了完成在pdf中导出echarts图&#xff0c;如果边框加在dom上面&#xff0c;pdf-lib导出svg的时候并不会导出边框&#xff0c;所以只能在echarts图上面加边框 grid的边框是在图里…...

qt+vs Generated File下的moc_和ui_文件丢失导致 error LNK2001

qt 5.9.7 vs2013 qt add-in 2.3.2 起因是添加一个新的控件类&#xff0c;直接把源文件拖进VS的项目里&#xff0c;然后VS卡住十秒&#xff0c;然后编译就报一堆 error LNK2001 一看项目的Generated Files下的moc_和ui_文件丢失了一部分&#xff0c;导致编译的时候找不到了。因…...

【汇编逆向系列】六、函数调用包含多个参数之多个整型-参数压栈顺序,rcx,rdx,r8,r9寄存器

从本章节开始&#xff0c;进入到函数有多个参数的情况&#xff0c;前面几个章节中介绍了整型和浮点型使用了不同的寄存器在进行函数传参&#xff0c;ECX是整型的第一个参数的寄存器&#xff0c;那么多个参数的情况下函数如何传参&#xff0c;下面展开介绍参数为整型时候的几种情…...