uni-app接口请求封装

1.前言。

正所谓“工欲善其事必先利其器”,在vue-PC项目中,我们可以借助axios来封装对应的api接口请求(ps:axios的接口请求封装)。不过,如果是用uni-app开发小程序,那么又该如何借助uni-app自带的网络请求uni.request()来封装“万金油”的api接口请求呢?

2.认识uni.request。

  • 官方:uni.request

  • 在各个小程序平台运行时,网络相关的 API 在使用前需要配置域名白名单,换成大白话就是说:在uni-app中访问的网络接口请求域名必须要在你的微信/支付宝(你所要开发部署的小程序服务商)后台中配置对应的域名白名单

  • uni.request()中特别注意的是请求方法必须是大写(比如:'GET','POST')等。

  • uni.request()的返回值会根据你的写法来返回requestTask对象或者是封装后的Promise对象

3.认识uni.getAccountInfoSync()。

想在uni-app中封装“万金油”通用型接口api请求,还有一个很重要的点就是要借助uni.getAccountInfoSync()。官方解释是:获取当前帐号信息,可以返回小程序的Appid。如果使用了微信小程序的云端插件,还可以返回当前插件Appid、版本号。

 4.封装步骤解析。

  1. 结构图:

  1. 新建api文件夹,再在其内新建config.js文件用于处理环境域名配置,代码如下。
export default {
	//接口请求域名配置
	api: function() {
		let curVersion = uni.getAccountInfoSync().miniProgram.envVersion;
		switch (curVersion) {
			case "develop": //开发版
				return "https://sharebk.oss-cn-hangzhou.aliyuncs.com";
			case 'trial': //体验版
				return "http://xxx.xxx.xxx.xxx:xxx"
			case 'release': //正式版
				return "http://xxx.xxx.xxx.xxx:xxx"
			default: //其他,默认调用正式版
				return "http://xxx.xxx.xxx.xxx:xxx"
		}
	}
}

  1. 在api文件夹内新建request.js文件用于封装uni.request(),代码如下。
import config from './config.js';

const request = (url = '', method = 'GET', data = {}, header = {   //这里这样封装是为了后续具体组件中使用时可以直接传参,需按此顺序传参;而不需要写url:xxx等键值对传参
	//具体的header和后端商同后再编写,这里以常见的token为例
	'token': uni.getStorageSync('token') ? uni.getStorageSync('token') : '',
}) => {
	return new Promise((resolve, reject) => {
		uni.request({
			url: config.api() + url, //接口地址:前缀+方法中传入的地址
			method: method, //请求方法
			data: data, //传递参数
			header: header, //自定义头部,和后端商同后编写
			success: (res) => {
				console.log('request.js文件的通用接口请求封装返回的结果数据',res);
				//注:因为这里对请求成功的没有统一设置抛错提示,所以后续具体组件中使用接口请求的res除200(实际以后端同事定好的为准)成功外的其他code需要额外写抛错提示
				if (res.data.code == 'xxx') { //自定请求失败的情况,这里以常见的token失效或过期为例
					uni.removeStorageSync('token');
					uni.showModal({
						showCancel: false,
						title: '温馨提示',
						content: res.data.msg,
						success: function(result) {
							if (result.confirm) {
								// uni.reLaunch({
								// 	url: '/pages/login/index'    //这里需用绝对路径才可
								// });
							}
						}
					});
				}
				resolve(res.data) //成功
			},
			// 这里的接口请求,如果出现问题就输出接口请求失败的msg;
			//注:因为这里对于请求失败的设置统一抛错提示了,所以后续具体组件中使用接口请求的catch中不需要再写抛错提示
			fail: (err) => {
				uni.showToast({
					title: "" + err.msg,
					icon: 'none'
				});
				reject(err)
			}
		})
	})
}

export default request;
  1. 在项目入口文件main.js中注册全局通用请求。

  1. 具体组件中使用(这里以oss为例,实际开发换成服务端同事的接口即可)。

  1. 效果。

5.源码。 

源码链接:GitHub代码 (如因网络等原因打不开GitHub,请移步 码云代码)。

6.结语。

以上就是在uni-app中封装通用api接口请求的全部过程,当然这里只展示了最基础的api封装,并未做过多的拦截处理等,读友可以根据自己的实际开发情况做请求拦截和响应处理。码文不易,大佬勿喷,欢迎三连。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

了解Unity编辑器之组件篇Physics(四)

Physics:用于处理物理仿真和碰撞检测。它提供了一组功能强大的工具和算法,用于模拟真实世界中的物理行为,使游戏或应用程序更加真实和可信。 主要用途包括: 碰撞检测:Unity Physics 提供了高效的碰撞检测算法&#x…

【论文笔记】RCM-Fusion: Radar-Camera Multi-Level Fusion for 3D Object Detection

原文链接:https://arxiv.org/abs/2307.10249 1. 引言 目前的一些雷达-相机融合3D目标检测方法进行实例级的融合,从相机图像生成3D提案,并与雷达点云相关联以修正提案。但这种方法没有在最初阶段使用雷达,依赖于相机3D检测器&…

VAE-根据李宏毅视频总结的最通俗理解

1.VAE的直观理解 先简单了解一下自编码器,也就是常说的Auto-Encoder。Auto-Encoder包括一个编码器(Encoder)和一个解码器(Decoder)。其结构如下: 自编码器是一种先把输入数据压缩为某种编码, 后仅通过该编…

【2500. 删除每行中的最大值】

来源:力扣(LeetCode) 描述: 给你一个 m x n 大小的矩阵 grid ,由若干正整数组成。 执行下述操作,直到 grid 变为空矩阵: 从每一行删除值最大的元素。如果存在多个这样的值,删除其…

【Spring Cloud】Ribbon 中的几种负载均衡策略

文章目录 前言一、Ribbon 介绍二、负载均衡设置三、7种负载均衡策略3.1.轮询策略3.2.权重策略3.3.随机策略3.4.最小连接数策略3.5.重试策略3.6.可用性敏感策略3.7.区域敏感策略 前言 负载均衡通常有两种实现手段,一种是服务端负载均衡器,另一种是客户端…

OSI模型简介及socket,tcp,http三者之间的区别和原理

1.OSI模型简介(七层网络模型) OSI 模型(Open System Interconnection model):一个由国际标准化组织提出的概念模型,试图提供一个使各种不同的计算机和网络在世界范围内实现互联的标准框架。 它将计算机网络体系结构划分为七层,每…

【2023】java数据结构-时间、空间复杂度分析

1、算法效率 算法效率分析分为两种:第一种是时间效率,第二种是空间效率。时间效率被称为时间复杂度,而空间效率被称作空间复杂度。 时间复杂度主要衡量的是一个算法的运行速度,而空间复杂度主要衡量一个算法所需要的额外空间 2、…

Docker 数据管理

Docker 数据管理 一、docker数据管理 1.数据卷 数据卷是一个供容器使用的特殊目录,位于容器中。可将宿主机的目录挂载到数据卷上,对数据卷的修改操作立刻可见,并且更新数据不会影响镜像,从而实现数据在宿主机与容器之间的迁移。…

【数据库 - 用户权限管理】(简略)

目录 一、概述 二、用户权限类型 1.ALL PRIVILEGES 2.CREATE 3.DROP 4.SELECT 5.INSERT 6.UPDATE 7.DELETE 8.INDEX 9.ALTER 10.CREATE VIEW和CREATE ROUTINE 11.SHUTDOWN 12GRANT OPTION 三、语句格式 1.用户赋权 2.权限删除 3.用户删除 一、概述 数据库用…

Sentinel限流中间件

目录 介绍 Sentinel 的特征 Sentinel 的组成 实战使用 简单实例 配置本地控制台 使用可视化ui配置简单流控 配置异步任务限流 使用注解定义限流资源 SpringCloud整合Sentinel 简单整合 并发线程流控 关联模式 整合openFeign使用 介绍 随着微服务的流行&#xff0…

phkit - 中英音素处理、文本转拼音、文本正则化

文章目录 关于 phkit安装包含组件pinyinkitchinesesymbolsequencepinyinphonemenumberconvertstyleenglish关于 phkit phoneme toolkit: 拼音相关的文本处理工具箱,中文和英文的语音合成前端文本解决方案。 github : https://github.com/KuangDD/phkit

RT thread 之 Nand flash 读写过程分析

文章目录 前言:什么是Nand Flash?1、Nand Flash 读取步骤2、从主存读到Cache2.1 在标准spi接口下读取过程2.2 测试时序(SPI频率30MHz) 3.从Cache读取数据3.1在标准spi接口读取过程测试时序 前言:什么是Nand Flash&…

【LangChain】检索器之上下文压缩

LangChain学习文档 【LangChain】检索器(Retrievers)【LangChain】检索器之MultiQueryRetriever【LangChain】检索器之上下文压缩 上下文压缩 LangChain学习文档 概要内容使用普通向量存储检索器使用 LLMChainExtractor 添加上下文压缩(Adding contextual compression with an…

动态分段的JavaScript实现【线性参考】

有许多很酷的 GIS 应用程序将海拔和距离结合在一起。 当用户沿着高程图拖动光标时,地图上的位置通常会更新。 推荐:用 NSDT设计器 快速搭建可编程3D场景。 在尝试将此功能构建到我的一个项目中时,我了解到它需要一种称为线性参考(…

mars3d绘制区域范围(面+边框)

1、图例(绿色面区域白色边框) 2、代码 1)、绘制区域ts文件 import { mapLayerCollection } from /hooks/cesium-map-init /*** 安全防護目標* param map*/ export const addSafetyProtection async (map) > {const coverDatas await m…

浅谈智能电容器在低压配电网末端的应用

安科瑞 华楠 摘要:电容器优化配置和投切是配电网络优化的一项重要内容。电容器优化配置,侧重对电容器优化投切的各种算法进行了详细评述,分析了各种算法的特点及存在的问题,以促进该研究领域的进一步发展。 关键词:电…

【字节跳动青训营】后端笔记整理-3 | Go语言工程实践之测试

**本文由博主本人整理自第六届字节跳动青训营(后端组),首发于稀土掘金:🔗Go语言工程实践之测试 | 青训营 目录 一、概述 1、回归测试 2、集成测试 3、单元测试 二、单元测试 1、流程 2、规则 3、单元测试的例…

网络传输层协议:UDP和TCP

背景知识 再谈端口号 端口号(Port)标识了一个主机上进行通信的不同的应用程序; 在TCP/IP协议中, 用 "源IP", "源端口号", "目的IP", "目的端口号", "协议号" 这样一个五元组来标识一个通信(可以通过 netstat -…

SpringBoot中接口幂等性实现方案-自定义注解+Redis+拦截器实现防止订单重复提交

场景 SpringBootRedis自定义注解实现接口防刷(限制不同接口单位时间内最大请求次数): SpringBootRedis自定义注解实现接口防刷(限制不同接口单位时间内最大请求次数)_redis防刷_霸道流氓气质的博客-CSDN博客 以下接口幂等性的实现方式与上面博客类似,…

IOS自动化测试环境搭建教程

目录 一、前言 二、环境依赖 1、环境依赖项 2、环境需求与支持 三、环境配置 1、xcode安装 2、Git安装 3、Homebrew安装(用brew来安装依赖) 4、npm和nodejs安装 5、libimobiledevice安装 6、idevicesinstaller安装 7、ios-deploy安装 8、Ca…