uniapp对uni.request()的封装以及使用

news2024/11/18 9:30:40

前言:

在uniapp中向服务端发送请求较为容易,使用 uni.request() 即可。

uni.request({
    url: 'https://www.example.com/request', //仅为示例,并非真实接口地址。
    data: {
        text: 'uni.request'
    },
    header: {
        'custom-header': 'hello' //自定义请求头信息
    },
    success: (res) => {
        console.log(res.data);
        this.text = 'request success';
    }
});

以上为官网给出的API示例,但是如果每个请求都这样写,就比较繁琐了。

在之前的项目中我们普遍采用的是对 axios的封装 ,当然uniapp中也可以使用,不过还需要进行适配,较为麻烦,可以直接对 uni.request() 做一个封装。

uni.request()封装

const url_all = {
	'DEV': 'http://localhost:8080', // 开发
	'PRO': 'http://111.111.111.111:8080', // 生产
}

let BASEURL = url_all['DEV'] // 调整当前环境

/*
* 全局请求封装
* @param path 请求路径
* @param method 请求类型(GET/POST/DELETE等)
* @oaram data 请求体数据
* @param loading 请求未完成是是否显示加载中,默认为true
*/
export default (path, method, data = {}, loading = true) => {
	// 获取存储token
	const token = uni.getStorageSync("token");

	if (loading) {
		uni.showLoading({
			title: "加载中",
			mask: true
		});
	};
	//根据token进行调用函数
	if (token != '') {
		return tokenRequest(path, method, data, loading, token)
	} else {
		return noTokenRequest(path, method, data, loading)
	}
};

// 无token时发送请求函数
function noTokenRequest(path, method, data, loading) {
	return new Promise((resolve, reject) => {
		uni.request({
			url: BASEURL + path,
			method: method,
			data,
			success(response) {
				// console.log('%c响应拦截:', ' background:green', response);
				/* if (response.data.code === 3001) {
					// logout()
				} */
				/* if (response.data.code !== 20) {
					uni.showToast({
						icon: "none",
						duration: 4000,
						title: response.data.msg
					});
				} */
				console.log(response.data)
				resolve(response.data);
			},
			fail(err) {
				uni.showToast({
					icon: "none",
					title: '服务响应失败'
				});
				console.error(err);
				reject(err);
			},
			complete() {
				uni.hideLoading();
			}
		});
	});
}


// 有token时发送请求函数
function tokenRequest(path, method, data, loading, token) {
	return new Promise((resolve, reject) => {
		uni.request({
			url: BASEURL + path,
			method: method,
			data,
			header: {
				"token":  token
			},
			success(response) {
				console.log('%c响应拦截:', ' background:green', response);
				if (response.data.code === 40101) {
					// logout()
				}
				console.log(response.data)
				resolve(response.data);
			},
			fail(err) {
				uni.showToast({
					icon: "none",
					title: '服务响应失败'
				});
				console.error(err);
				reject(err);
			},
			complete() {
				uni.hideLoading();
			}
		});
	});
}

封装考虑到很多项目都采用了token进行登录验证,所以进行了区分。

另外,resolve()中返回的是res.data,是因为uni.request()就有自己的一些状态
res.data才是服务器返回的数据,包括在服务器端设置的自定义状态码和数据等。

在这里插入图片描述

封装的使用

api.js

import request from '@/utils/request/index.js'; // 封装的request.js文件的位置

// 获取用户基本信息 
export const getBaseInfo = () => {
	return request(`/user/basicInfo`, 'GET')
}

// 获取用户基本信息 参数拼接在路径
export const getBaseInfo = (userId) => {
	return request(`/user/basicInfo?userId=${userId}`, 'GET')
}

// 获取用户基本信息 restful风格
export const getBaseInfo = (userId) => {
	return request(`/user/basicInfo/userId`, 'GET')
}

// 获取公匙
export const getPubKey = (loading = true) => {
	return request(`/user/getPubKey`, 'GET', null, loading)
}

// 获取公匙
export const getPubKey = () => {
	return request(`/user/getPubKey`, 'GET', null, false)
}

// 获取公匙
export const login = (user) => {
	return request(`/user/login`, 'POST', user)
}

在页面中使用

<template>

</template>

<script>
	import {
		login
	} from '@/api/login.js'
	export default {
		data() {
			return {
				user:{
					username:'',
					password:''
			};
		},
		methods: {
			// 登录
			login() {
				login(user).then(res=>{
					// TODO 其他操作
				}
			},
		}
</script>

<style lang="less" scoped>

</style>

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

weui cells 如何去掉边框

问题&#xff1a;weui cells 如何去掉边框 解决&#xff1a; cells通过before,after实现边框&#xff0c;不显示的话&#xff0c;在引用的页面wxss加上&#xff1a; .weui-cells:before,.weui-cells:after {border: none; }

2023牛客暑期多校训练营6 A-Tree (kruskal重构树))

文章目录 题目大意题解参考代码 题目大意 ( 0 ≤ a i ≤ 1 ) , ( 1 ≤ c o s t i ≤ 1 0 9 ) (0\leq a_i\leq 1),(1 \leq cost_i\leq 10^9) (0≤ai​≤1),(1≤costi​≤109) 题解 提供一种新的算法&#xff0c;kruskal重构树。 该算法重新构树&#xff0c;按边权排序每一条边…

学会这样提问,你就超过了82.7%的老网工

下午好&#xff0c;我的网工朋友 很多朋友会说&#xff0c;我怎么问问题&#xff0c;在群里&#xff0c;或者后台&#xff0c;还有给老杨总发消息&#xff0c;都没收到比较详细的回复&#xff1f;尤其是问技术问题的时候。 除了我们回复消息的时间和精力的确比较有限之外&…

JMeter压力测试记录

最近在学习redis解决高并发下导致数据库数据不准确的问题&#xff0c;使用到了一些工具&#xff0c;包括Jmeter&#xff0c;Redis-desktop-manager.。Jmeter用于模拟高并发情景&#xff0c;Redis-desktop-manager是redis数据库的GUI界面。 一、单元测试生成测试数据 1)插入20…

python可以做哪些小工具,python可以做什么小游戏

大家好&#xff0c;小编来为大家解答以下问题&#xff0c;python可以做什么好玩的&#xff0c;python可以做什么小游戏&#xff0c;今天让我们一起来看看吧&#xff01; 最近有几个友友问我说有没有比较好玩的Python小项目来练手&#xff0c;于是我找了几个比较有意思的给他们&…

进程间的六种通信方式以及优缺点总结

参考博客链接&#xff1a;https://blog.csdn.net/qq_34827674/article/details/107678226 前提知识&#xff1a;每个进程都有自己的用户空间&#xff0c;而内核空间是每个进程共享的。因此进程之间想要进行通信&#xff0c;就需要通过内核来实现。 1、管道 管道是最简单&…

Springboot部署ELK实战

Springboot部署ELK实战 1、部署docker、docker-compose环境安装docker安装docker-compose 2、搭建elk1、构建目录&&配置文件1、docker-compose.yml 文档2、Kibana.yml3、log-config.conf 2、添加es分词器插件3、启动 3、Springboot项目引入es、logStash配置1、引入依赖…

ORALCE RAC总结

一:ORACLE RAC集群安装 ASM磁盘管理 二:ORACLE RAC集群报错排查总结 三:ORACLE RAC集群报错排查总结 3.1 ORA-29760: instance_number parameter not specified RAC1节点,RAC2节点 解决 export ORACLE_SID=a81(数据库实例名) 3.2 参考资料 ORACLE RAC集群 安装参…

深度学习(34)—— StarGAN(2)

深度学习&#xff08;34&#xff09;—— StarGAN&#xff08;2&#xff09; 完整项目在这里&#xff1a;欢迎造访 文章目录 深度学习&#xff08;34&#xff09;—— StarGAN&#xff08;2&#xff09;1. build model&#xff08;1&#xff09;generator&#xff08;2&#…

人有教养的十大特征!

教养&#xff0c;就是一个人的品行。 什么是教养&#xff1f; 教养&#xff0c;是一种尊重&#xff0c;也是将心比心的善意&#xff1b;教养&#xff0c;是一种气量&#xff0c;也是宽以待人的度量&#xff1b;教养&#xff0c;是一种品德&#xff0c;也是崇高的人格魅力。 …

如何入门/转行网络安全,实现自己的“黑客梦”

1.指出一些自学的误区 2.提供客观可行的学习表 3.推荐我认为适合小白学习的资源.大佬绕道哈&#xff01; 第一阶段&#xff1a;基础操作入门 入门的第一步是学习一些当下主流的安全工具课程并配套基础原理的书籍&#xff0c;一般来说这个过程在1个月左右比较合适。 第二阶…

java如何将tif文件拆分为多个jpg文件,附jar包下载地址

1.在build.gradle中添加依赖&#xff1a; implementation group: javax.media, name: jai_codec, version: 1.1.3implementation group: com.sun, name: jai_core, version: 1.1.3implementation group: javax.media, name: jai_imageio, version: 1.1implementation xx.com.su…

OpenLayers入门,OpenLayers解析通过fetch请求的GeoJson格式数据,并叠加要素文字标注,以行政区划边界为例

专栏目录: OpenLayers入门教程汇总目录 前言 本章讲解如何使用OpenLayers通过fetch请求geojson数据,然后通过OpenLayers解析为Feature要素叠加到图层上,并且通过动态设置标注方式显示要素属性为文字标注。 本章还是以行政区划边界为例,这个示例在开发中比较常用,建议收藏…

51单片机(普中HC6800-EM3 V3.0)实验例程软件分析 实验四 蜂鸣器

目录 前言 一、原理图及知识点介绍 1.1、蜂鸣器原理图&#xff1a; 二、代码分析 前言 第一个实验:51单片机&#xff08;普中HC6800-EM3 V3.0&#xff09;实验例程软件分析 实验一 点亮第一个LED_ManGo CHEN的博客-CSDN博客 第二个实验:51单片机&#xff08;普中HC6800-EM…

【树】 二叉树 堆与堆排序 平衡(AVL)树 红黑(RB)树

目录 1 树1.1 认识树1.2 树的相关概念1.3 树的表示孩子兄弟表示法 2 二叉树2.1 概念2. 2 特殊二叉树2.3 二叉树的性质2.4 二叉树的存储结构 3 堆 — 完全二叉树的顺序结构实现3.1 堆的概念3.2 核心代码3.3 堆应用1 堆排序2 TOP-K问题 4 二叉树的链式存储4.1 二叉链结构与初始化…

大道至简,炎凰数据要做极致好用的国产大数据分析基础软件|爱分析调研

自2000年代初大数据技术诞生以来&#xff0c;为了应对不断丰富的应用场景、日益复杂的数据类型&#xff0c;以及逐渐膨胀的数据规模&#xff0c;大数据业内逐渐发展出了多种技术路线。 到今天&#xff0c;大数据产品和技术已处于百花齐放的状态&#xff0c;国内市场近年来也因…

.Net6 Web Core API --- AOP -- log4net 封装 -- MySQL -- txt

目录 一、引入 NuGet 包 二、配置log4net.config 三、编写Log4net封装类 四、编写日志记录类 五、AOP -- 拦截器 -- 封装 六、案例编写 七、结果展示 一、引入 NuGet 包 log4net Microsoft.Extensions.Logging.Log4Net.AspNetCore MySql.Data ---- MySQL…

好用的智能ai绘画文字转绘画软件大揭秘

在一个平凡的小镇上&#xff0c;有一位名叫李彤的年轻画家。她对绘画充满了热爱和渴望。但因为经济条件有限&#xff0c;无法承担昂贵的绘画软件费用。然而&#xff0c;就在她感到困惑和单调的文字转换为令人惊叹的绘画作品&#xff0c;让每一位渴望艺术表达的人都能轻松实现自…

css实现卡片的左上角有一个三角形的遮盖效果

需求: 卡片的左上角有一个绿色的三角形标签,用来区分状态 实现: .vCard{position: relative;overflow: hidden; } .vCard::before {content: "";position: absolute;top: 0;left: 0;width: 0;height: 0;border-bottom: 20px solid transparent;border-left: 20px …

直线模组在机械手中的应用

机械手是一种能模仿人手和臂的某些动作功能&#xff0c;用以按固定程序抓取、搬运物件或操作工具的自动操作装置&#xff0c;可代替人的繁重劳动以实现生产的机械化和自动化&#xff0c;能在有害环境下操作以保护人身安全&#xff0c;因而广泛应用于机械制造、冶金、电子、轻工…