uni-app 封装api请求
前端封装api请求
前端封装 API 请求可以提高代码的可维护性和重用性,同时使得 API 调用更加简洁和易用。
下面是一种常见的前端封装 API 请求的方式:
-
创建一个 API 封装模块或类:可以使用 JavaScript 或 TypeScript 创建一个独立的模块或类来封装 API 请求。这个模块或类可以包含一些常用的方法,例如
get
、post
等,用于发送不同类型的请求。 -
配置基本信息:在封装模块中,设置 API 的基本信息,例如 API 的根地址、请求头等。可以定义一些默认配置,也可以允许开发者在调用时传入自定义配置。
-
实现请求方法:根据需要,实现不同的请求方法,例如
get
、post
、put
、delete
等。这些方法通常接收参数(例如 URL、数据、请求头等),并返回一个 Promise 对象,以便在异步请求完成后获取数据或处理错误。 -
处理请求和响应拦截:在请求发送前,可以对请求进行一些预处理,例如添加统一的请求头、身份验证等。在响应返回后,也可以对响应进行拦截和处理,例如判断状态码、处理错误信息等。
-
错误处理:在封装的 API 模块中,可以统一处理请求错误。例如,对于网络错误或服务器返回的错误信息,可以进行统一的处理,并根据需要进行提示或记录操作。
-
使用封装的 API 模块:在项目中使用封装的 API 模块进行 API 请求。通过调用封装模块中的方法,传入请求所需的参数,即可发送请求并获取响应数据。
这种方式的好处是,在项目中可以复用封装好的 API 请求逻辑,减少代码的冗余,并且使得 API 调用的代码更加清晰和易读。
此外,对于底层的网络请求库,也可以根据需要进行切换和替换,而不需要修改大量的业务代码。
更多详细内容,请微信搜索“前端爱好者
“, 戳我 查看 。
uni-app 封装api请求
在uni-app中封装API请求可以按照以下步骤进行:
-
创建一个
utils
文件夹,并在其中创建一个api.js
文件,用于存放API请求相关的代码。 -
在
api.js
文件中,引入uni.request
方法用于发送请求。示例代码如下:
export function request(url, method, data) {return new Promise((resolve, reject) => {uni.request({url: url,method: method,data: data,success: (res) => {resolve(res.data);},fail: (err) => {reject(err);}});});
}
这里使用了Promise对象来处理异步请求,方便后续的使用和处理。
- 在
api.js
文件中,定义具体的API请求函数。示例代码如下:
import { request } from './utils/api';export function login(username, password) {const url = 'https://api.example.com/login';const method = 'POST';const data = {username: username,password: password};return request(url, method, data);
}export function getUserInfo(userId) {const url = `https://api.example.com/users/${userId}`;const method = 'GET';return request(url, method);
}
以上示例代码中包括了登录和获取用户信息两个API请求函数。根据具体的需求,你可以进行修改或添加其他的API请求函数。
- 在需要使用API的页面或组件中引入并调用定义的API请求函数即可。示例代码如下:
import { login, getUserInfo } from './utils/api';login('example', 'password').then((res) => {console.log('登录成功', res);
}).catch((err) => {console.error('登录失败', err);
});getUserInfo(123).then((res) => {console.log('获取用户信息成功', res);
}).catch((err) => {console.error('获取用户信息失败', err);
});
以上示例代码展示了如何使用封装的API请求函数来进行登录和获取用户信息的操作。根据具体需求,你可以在相应的页面或组件中调用相关API请求函数。
通过以上步骤,你就可以在uni-app中封装API请求,使代码结构更加清晰和可维护。记得根据实际情况进行适当的错误处理和数据处理。
uni-app封装api请求改进
// @/utils/request.js
// #ifdef MP-WEIXIN
const baseURL = "https://www.bradenhan.tech"
// #endif
// #ifdef H5
const baseURL = ""
// #endifconst timeout = 5000// 封装api请求
const request = function(option){ // 获取用户传入的urlvar url = baseURL + option.url; // 添加提请求头var header = option.header||{}if(!!option.needToken){// 添加token header.Authorization = 'Bearer ' + uni.getStorageSync('token'); }header.source=1;header.channel="h5";// 加载提示var loading = option.loading;// 如果有loading就显示loadingif(loading){uni.showLoading(loading)}// 返回一个promisereturn new Promise((resolve,reject)=>{ // 发起一个request请求uni.request({url, //请求urlmethod:option.method||"GET", //请求方法header, //请求头timeout,data:option.data||option.params, //请求数据success(res){// 成功返回结果if(res.statusCode===200){resolve(res.data)// 如果是101 没有权限if(res.data.code==101){uni.showToast({title: res.data.msg,icon:'none'})uni.redirectTo({url: '/pages/login/index',})}if(res.data.code!=200&&res.data.code!=0){uni.showToast({icon:'none',title:res.data.msg||'请求错误'})}} },fail(err){// 失败返回失败结果uni.showToast({title: '请求失败',icon:'error'})console.error(err);reject(err)},complete(){// 完成 关闭loadingif(loading){uni.hideLoading()}}})})
}// 定义get简洁方法
request.get=function(url,config){return request({url,method:"GET",...config})
}// 定义post简洁方法
request.post=function(url,data,config){return request({url,method:"POST", ...config,data})
}
// 导出请求
export default request;
统一控制api.js
request.post(url,data,needToken)
参数:
- url 请求url
- data 请求参数data
- needToken 是否需要参数
// @/api/index.jsimport request from '@/utils/request.js' // 用户注册
export function customUseRegister(data){return request.post("/xxxx1",data)
}// 微信用户登录
export function customUserLogin(data){return request.post("/xxxx2",data)
} // 更新用户信息 -- 需要使用Token
export function customUserUpdate(data){return request.post("/xxxx3",data,{needToken: true})
}
组件中使用
import { customUserLogin, customUseRegister,customUserUpdate } from '@/api/index.js'customUserUpdate(data).then((res) => {console.log('成功', res);
}).catch((err) => { console.error('登录失败', err);
});
相关文章:
![](https://img-blog.csdnimg.cn/img_convert/f294273116940ef16ee89596bc6a2bb7.png)
uni-app 封装api请求
前端封装api请求 前端封装 API 请求可以提高代码的可维护性和重用性,同时使得 API 调用更加简洁和易用。 下面是一种常见的前端封装 API 请求的方式: 创建一个 API 封装模块或类:可以使用 JavaScript 或 TypeScript 创建一个独立的模块或类来…...
![](https://img-blog.csdnimg.cn/642ef3be33eb44f98b0440908432e80b.png)
SpringCloud实用篇1——eureka注册中心 Ribbon负载均衡原理 nacos注册中心
目录 1 微服务1.1 微服务的演变1.2 微服务1.3 SpringCloud1.4 小结 2 服务拆分及远程调用2.1 服务拆分2.2 服务拆分案例2.3 实现远程调用2.4 提供者与消费者 3 Eureka注册中心3.1 Eureka的结构和作用3.2 搭建eureka-server3.3 服务注册3.4 服务发现 4 Ribbon负载均衡4.1 负载均…...
![](https://img-blog.csdnimg.cn/img_convert/e0b6fe49d7ecd87c5029e5ba2615ee90.png)
【MySQL】sql字段约束
在MySQL中,我们需要存储的数据在特定的场景中需要不同的约束。当新插入的数据违背了该字段的约束字段,MySQL会直接禁止插入。 数据类型也是一种约束,但数据类型这个约束太过单一;比如我需要存储的是一个序号,那就不可…...
![](https://img-blog.csdnimg.cn/img_convert/93a76a7d5cd9b3210db5453b1e2d4b3e.png)
森海塞尔为 CUPRA 首款纯电轿跑 SUV – CUPRA Tavascan 注入音频魅力
森海塞尔为 CUPRA 首款纯电轿跑 SUV – CUPRA Tavascan 注入音频魅力 音频专家森海塞尔携手富有挑战精神的 CUPRA,雕琢时代新贵车型,打造畅快尽兴的驾驶体验 全球知名音频专家森海塞尔与以颠覆传统、充满激情、不甘现状而闻名的汽车品牌 CUPRA 展开合作…...
![](https://www.ngui.cc/images/no-images.jpg)
Java、Android 加解密、编码、压缩、解压缩、Hash
对称加密: 算法:AES (128位)/ DES (56位)....等 加密原理: 原数据--->加密算法(密钥)------>密文 解密原理: 密文---->解密算法(密钥)------>原数据 非对称加密 算法&#…...
![](https://img-blog.csdnimg.cn/2df5cdf9298946c78f0f2aee6d278010.jpeg#pic_center)
11_Pulsar Adaptors适配器、kafka适配器、Spark适配器
2.3. Pulsar Adaptors适配器 2.3.1.kafka适配器 2.3.2.Spark适配器 2.3. Pulsar Adaptors适配器 2.3.1.kafka适配器 Pulsar 为使用 Apache Kafka Java 客户端 API 编写的应用程序提供了一个简单的解决方案。 在生产者中, 如果想不改变原有kafka的代码架构, 就切换到Pulsar的…...
![](https://img-blog.csdnimg.cn/img_convert/d7b2825afcffc9917f5e324f69fc9ab0.png)
jupyter文档转换成markdown
背景 上一篇文章**《如何优雅地用python生成模拟数据》**我就使用jupyter写的,这个真的是万能的,可以插入markdown格式的内容,也可写代码,关键是像ipython一样,可以分步执行。 我可以这样自由的写我的博客内容&#x…...
![](https://img-blog.csdnimg.cn/52667c8e6a4c45cdae7e9ea51283efa5.png)
日志框架及其使用方法
log4j和logBack,同一个人写的,logBack为log4j的升级版,SpringBoot中默认集成logBack 作用:记录软件发布后的一些bug,以及数据是怎样被操作的 传统开发弊端: 1.日志直接输出在控制台,关闭控制台后,日志消…...
![](https://img-blog.csdnimg.cn/6d9f30bba4e841748e198aec38b9149e.png)
ZIG:理解未来编程语言的视角
文章目录 摘要:引言:性能简洁性和模块化避免常见错误和陷阱总结:参考资料📑: 摘要: 本文介绍了新兴编程语言ZIG的目标和特点,包括高性能、简洁性和模块化,并分析了这些特点是如何通过语言设计来…...
![](https://img-blog.csdnimg.cn/img_convert/7b466709b221bb2934139181743ba1bb.gif)
让三驾马车奔腾:华为如何推动空间智能化发展?
上个月,国务院常务会议审议通过了《关于促进家居消费的若干措施》,其中明确提出了“推动单品智能向全屋智能发展创新培育智能消费”“开展数字家庭建设试点”等推动全屋智能拼配发展的建议与方案。 可以说,以整屋为单位的空间智能品类&#x…...
![](https://img-blog.csdnimg.cn/57ee072cba534f45b620689a122d85d7.png)
2022年03月 Python(一级)真题解析#中国电子学会#全国青少年软件编程等级考试
一、单选题(共25题,每题2分,共50分) 第1题 已知a“161”,b“16”,c“8”,执行语句da>b and a>c,变量d的值为是? A:0 B:1 C:True D&am…...
![](https://img-blog.csdnimg.cn/b91ca03795284a4488b2a34a94e703be.png#pic_center)
WIN大恒工业相机SDK开发
大恒工业相机SDK开发概览 一、开发环境搭建1、C# 环境配置(VS2019)2、C 环境配置(VS2019)3、python 环境配置(Pycharm) 二、相机二次开发流程三、相机相机属性参数配置四、图像采集单帧采集回调采集 注意事…...
![](https://www.ngui.cc/images/no-images.jpg)
qt qml中各种Layout之间是如何对齐的?
问题描述: qt qml中下一个RowLayout如何对齐顶部到上方的ColumnLayout的底部略低一些间隔的位置? 我们怎么使用achors去锚定位置? 这些都是可以用anchors锚定属性,以及margin来设置的。 解决办法: 要实现将下一个R…...
![](https://www.ngui.cc/images/no-images.jpg)
Immutable.js 进行js的复制
介绍 在提供不可变(Immutable)数据结构的支持。不可变数据是指一旦创建后就不能被修改的数据,每次对数据进行更新都会返回一个新的数据对象,而原始数据保持不变。 使用 日常中我们使用的拷贝 (1) var arr { } ; arr2 arr ; …...
![](https://img-blog.csdnimg.cn/d82ab2a87a99461fa91a01d7c73f7e53.png)
java动态生成excel并且需要合并单元格
java动态生成excel并且需要合并单元格 先上图看一下预期效果 集成poi <dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-base</artifactId><version>4.0.0</version> </dependency> <dependency><…...
![](https://img-blog.csdnimg.cn/1b934526ee52476195f3be8365be53ee.png)
JMeter启动时常见的错误
很多小伙伴在学工具这一块时,安装也是很吃力的一个问题,之前记得有说过怎么安装jmeter这个工具。那么你要启动jmeter的时候,一些粉丝就会碰到如下几个问题。 1.解压下载好的jmeter安装,Windows 平台,双击 jmeter/bin …...
![](https://www.ngui.cc/images/no-images.jpg)
python pandas 排序
Series的排序: Series.sort_values(ascendingTrue, inplaceFalse) 参数说明: ascending:默认为True升序排序,为False降序排序inplace:是否修改原始Series DataFrame的排序: DataFrame.sort_values(by, as…...
![](https://img-blog.csdnimg.cn/606fad8498d74b7bbc38e9c41bfe11e6.png)
前后端分离式项目架构流程复盘之宿舍管理系统
文章目录 🐒个人主页🏅JavaEE系列专栏📖前言:【🎇前端】先创建Vue-cli项目(版本2.6.10,仅包含babel),请选择此项目并创建 【整理简化项目模板】【🎀创建路由】…...
![](https://www.ngui.cc/images/no-images.jpg)
Linux nohup 命令详解
nohup是Linux/Unix系统中非常有用的命令之一。它允许您在后台运行命令或脚本,并且在退出终端会话后仍然保持运行。这对于长时间运行的任务或进程非常有用,特别是当您需要离开终端但希望任务继续运行时。 nohup命令语法 nohup命令的基本语法如下&#x…...
![](https://img-blog.csdnimg.cn/img_convert/2b7431fbecfed7f85876371620f72aa8.png)
VoxWeekly|The Sandbox 生态周报|20230731
欢迎来到由 The Sandbox 发布的《VoxWeekly》。我们会在每周发布,对上一周 The Sandbox 生态系统所发生的事情进行总结。 如果你喜欢我们内容,欢迎与朋友和家人分享。请订阅我们的 Medium 、关注我们的 Twitter,并加入 Discord 社区…...
![](https://www.ngui.cc/images/no-images.jpg)
编程导航算法村第九关 | 二分查找
编程导航算法村第九关 | 二分查找 LeetCode852.这个题的要求有点啰嗦,核心意思就是在数组中的某位位置i开始,从0到i是递增的,从i1 到数组最后是递减的,让你找到这个最高点。 详细要求是:符合下列属性的数组 arr 称为山…...
![](https://www.ngui.cc/images/no-images.jpg)
linux 下安装部署flask项目
FlaskDemo 命名为test.py # codingutf-8 from flask import Flaskapp Flask(__name__)app.route("/") def index():return "test"if __name__ __main__:app.debug True# 这里host一定要写0.0.0.0 写127.0.0.1的无法访问 ——_——app.run(host"0.…...
![](https://www.ngui.cc/images/no-images.jpg)
在Vue里,将当前窗口截图,并将数据base64转为png格式传给服务器
目录 前言 1、将当前窗口截图,并将数据存储下来 2、定义将base64转png的方法 3、完整代码 总结 前言 记录来源于需求 1、将当前窗口截图,并将数据存储下来 export default { data() {return {image: // 存储数据} }mounted() {setTimeout(() >…...
![](https://www.ngui.cc/images/no-images.jpg)
Echarts图表Java后端生成Base64图片格式,POI写入Base64图片到Word中
Echarts图表Java后端生成请看上篇,此篇为Base64图片插入Word文档中Java后台生成ECharts图片,并以Base64字符串返回_青冘的博客-CSDN博客 try {XWPFParagraph xwpfParagraphimage doc.createParagraph(); // 创建图片段落xwpfParagraphimage.setAlignment(Paragraph…...
![](https://www.ngui.cc/images/no-images.jpg)
【AI】《动手学-深度学习-PyTorch版》笔记(十二):从零开始实现softmax回归
AI学习目录汇总 1、什么是特征? 对于图像算法,每个像素可以视为一个特征,例如图像的分辨率为28x28,则有784个特征。而且常常将二维的图像像素矩阵展开为长度为784的向量。 2、权重和偏置的规模 本例中,将使用Fashion-MNIST数据集,它是一个服装分类数据集,可以将服装…...
![](https://img-blog.csdnimg.cn/img_convert/954195688ceed25c73496afa8e5e44f2.jpeg)
汽车用功率电感器
支持车载用被动元件的可靠性认证测试标准“AEC-Q200”的绕线铁氧体功率电感器 LCXH 系列实现商品化,推出了“LCXHF3030QK”等 6 个尺寸的 64 款商品。 这些商品均是用于汽车车身类及信息娱乐等信息类的电源电路用扼流线圈及噪音滤波器的功率电感器。 LCXH 系列与民生…...
![](https://img-blog.csdnimg.cn/72f267ec0c384d33ac05ce960a2b65d0.png)
上传图片视频
分布式文件系统MinIo MinIO提供多个语言版本SDK的支持,下边找到java版本的文档: 地址:https://docs.min.io/docs/java-client-quickstart-guide.html MinIO测试(上传、删除、下载) public class MinioTest {MinioC…...
![](https://www.ngui.cc/images/no-images.jpg)
【UE5】UE5与Python Socket通信中文数据接收不全
最近在使用UE的Socket模块与Python服务器进行通信时遇到了一些坑,特此记录一下。 先来复现一下问题,这里只截取关键代码。 UE端: bool ASoc::SendMsg(const FString& Msg) {TSharedRef<FInternetAddr> TargetAddr ISocketSubsy…...
![](https://www.ngui.cc/images/no-images.jpg)
一些有难度的c++题目思路讲解--第一期2023/8/8 小Q的修炼与旷野大计算
说明: 本期博客将分为10篇讲解一些有点挑战的题目,第一期是所有人都可以看到,但后面的关注我才能看到哦!有望大家的支持!谢谢! 题目链接(按顺序) [NOI2013] 小Q的修炼 - 洛谷 小Q的修炼[NOI2013] 小Q的修炼 - 洛谷 [NOI2016] 旷野大计算 - 洛谷旷野大计算[NOI2016] 旷野…...
![](https://www.ngui.cc/images/no-images.jpg)
Node.js:path文件路径操作模块
path 用于文件路径操作 官方文档 https://nodejs.org/api/path.html 一个不错的解释 ┌─────────────────────┬────────────┐│ dir │ base │├──────┬ ├──────┬─────┤│ ro…...
![](/images/no-images.jpg)
哪个网站做的win10系统/山西网络营销seo
存在共享资源(共享一个文件,一块内存等等)的时候,为了防止并发访问时共享资源的数据不一致,引入了同步机制。 主要内容: 同步的概念同步的方法-加锁死锁锁的粒度1. 同步的概念 了解同步之前,先了解另外2个概念…...
![](https://img-blog.csdnimg.cn/img_convert/2fafe0e229e17b6f5a3f5c7dc678accd.png)
wordpress积分查看/广州竞价托管公司
在 Java 应用系统中为了实现邮件发送与收取功能,往往都会选择使用 JavaMail API。但该 API 涉及的内容比较繁琐,概念与细节都比较多,比如:Session、Message、Address、Authenticator、Transport、Store、Folder 等这些类ÿ…...
![](/images/no-images.jpg)
网站后台管理破解/线上推广产品
ERROR 2019 (HY000): Cant initialize character set gb2312搞了好半天,MySQL都重装了两次,号悲剧。。。之前设置了系统编码全都是UTF-8了的vi /etc/sysconfig/i18nLANGzh_CN.UTF-8LANGUAGEzh_CN.UTF-8:zh_CN.GB2312:zh_CNSUPPORTEDzh_CN.UTF-8:zh_CN:zh…...
![](/images/no-images.jpg)
用dw做网站首页步骤/百度的网址怎么写
这个网站没有反扒,使用的是Python 自带urllib ,解析库数xpath,生成器,数据保存到mongodb。代码 from urllib import request from pymongo import MongoClientfrom lxml import etreeclinet MongoClient(hostlocalhost, port27017) class R…...
![](https://www.oschina.net/img/hot3.png)
牡丹花网站建设策划书/百度秒收录排名软件
2019独角兽企业重金招聘Python工程师标准>>> 第一步:定义两个类 Task3 package group.esperanto.util;import java.text.SimpleDateFormat; import java.util.Date;import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereo…...
![](/images/no-images.jpg)
怎么创建网络平台/seo网站推广教程
mysqldump -u用戶名 -p密码 -d 数据库名 表名 > 脚本名; #导出整个数据库结构和数据 mysqldump -h localhost -uroot -p123456 database > dump.sql #导出整个多个数据库结构和数据 mysqldump -h localhost -uroot -p123456 --databases database1 database2> dump.sq…...