uniapp请求封装入门级实战记录

news2024/11/7 21:16:03

     简单记录一下uniapp请求进行封装的相关内容,方便以后查看!
     1.目录结构
     2.封装文件
     2.1 全局公共方法封装
     2.2 请求方法封装
     2.3 项目请求路径封装
     2.4 常用变量封装
     2.5 页面使用

1.目录结构

    项目根目录下创建common文件夹,包含内容:
        全局公共方法封装 commonMethod.js
        请求方法封装 packageMethod.js
        项目请求路径封装 httpApi.js
        常用变量封装 config.js
    不清楚文件内容的可以继续往下看.

2.1 全局公共方法封装

    这里主要是封装一下常用的方法

/**
 * 页面跳转
 * @author txm
 * 
 * @param {String} url 需要跳转的页面的路径
 */
const goTo = (url) => {
	uni.navigateTo({
		url:url
		})
}

/**
 * index页面跳转
 * @author txm
 * 
 * @param {String} url 需要跳转的index页面的路径
 */
const goToIndex = (url) => {
	uni.switchTab({
		url,
		success: function (res) {
			console.log(res)
		},
		fail: function (e) {
			console.log(e)
		}
	})
}
/**
 * 消息弹窗
 * @author txm
 * 
 * @param {String} title 标题
 * @param {Number} duration 窗口动画持续时间,单位为 ms
 * @param {String} icon 
 */
const showMsg=(title,icon='none',duration=1500)=>{
	uni.showToast({
	    title,
	    duration,
			icon
	});
}
/**
 * 显示加载中
 * @author txm
 * 
 */
const showLoading=()=>{
	uni.showLoading({
			title: '加载中',
			mask: true
		})
}
/**
 * 取消加载中
 * @author txm
 * 
 */
const hideLoading=()=>{
	uni.hideLoading();
}


//注册定义的方法
export const commonMethod={
	goTo,
	goToIndex,
	showMsg,
	showLoading,
	hideLoading
}

    main.js中注册全局公共方法

// 全局自定义方法  Vue.prototype:使用范围是每个vue实例中可用
import {commonMethod} from './common/commonMethod.js'
Vue.prototype.$commonMethod=commonMethod

2.2 请求方法封装

    这里是对常用的rest请求进行封装

import {commonMethod} from '@/common/commonMethod.js'
import config from '@/common/config.js'
// 服务器路径
const serverUrl = config.serverUrl; 
// 用户token
const token = uni.getStorageSync('token');

// post请求封装
function postRequest(url, data, header) {
	var promise = new Promise((resolve, reject) => {
		console.log('resolve,reject:this',this)
		console.log('commonMethod:',commonMethod)
		// 显示加载中
		commonMethod.showLoading()
		uni.request({
			url: serverUrl + url,
			data: data,
			method: 'POST',
			timeout: 100000,
			header: {
				'content-type': header || 'application/json',
				'token': token,
			},
			success: function(res){ 
				console.log('success:res',JSON.stringify(res))
				commonMethod.hideLoading();
				if (res.data.code == 200) {
					 resolve(res.data.data);
				}else{  // 非正常接口返回按照回调失败处理,方法中使用catch进行捕获显示到页面
					reject(res.data);
				}
			},
			fail: function(e) {
				console.log('fail:e',JSON.stringify(e))
				commonMethod.hideLoading(); 
				reject('网络错误');
			}
		})
	});
	return promise;
}

// get请求封装
function getRequest(url, data) {
	var promise = new Promise((resolve, reject) =>{
		// 显示加载中
		commonMethod.showLoading()
		uni.request({
			url: serverUrl + url,
			data: data,
			method: 'GET',
			timeout: 100000,
			header: {
				'content-type': 'application/json',
				'token': token
			},
			success: function(res){ 
				commonMethod.hideLoading();
				if (res.data.code == 200) {
					 resolve(res.data.data);
				}else{  // 非正常接口返回按照回调失败处理,方法中使用catch进行捕获显示到页面
					reject(res.data);
				}
			},
			fail: function(e) {
				console.log('fail:e',JSON.stringify(e))
				commonMethod.hideLoading(); 
				reject('网络错误');
			}
		})
	});
	return promise;
}

//put请求封装
function putRequest(url,data,header){
	var promise = new Promise((resolve,reject) => {
			// 显示加载中
			commonMethod.showLoading()
			uni.request({
				url:serverUrl + url,
				data:data,
				method:"PUT",
				header:{
					'content-type': header || 'application/json',
					'token': token,
					},
				success:function(res){
					commonMethod.hideLoading();
					if (res.data.code == 200) {
						 resolve(res.data.data);
					}else{  // 非正常接口返回按照回调失败处理,方法中使用catch进行捕获显示到页面
						reject(res.data);
					}
				},
				fail:function(e){
					console.log('fail:e',JSON.stringify(e))
					commonMethod.hideLoading(); 
					reject('网络错误');
				}
			});
	});
	return promise;
}
//del请求封装
function delRequest(url,data){
	var promise = new Promise((resolve,reject) => {
			// 显示加载中
			commonMethod.showLoading()
			uni.request({
				url:commoneUrl + url,
				data:data,
				method:"DELETE",
				header:{
					'content-type': header || 'application/json',
					'token': token,
					},
				success:function(res){
					commonMethod.hideLoading();
					if (res.data.code == 200) {
						 resolve(res.data.data);
					}else{  // 非正常接口返回按照回调失败处理,方法中使用catch进行捕获显示到页面
						reject(res.data);
					}
				},
				fail:function(e){
					console.log('fail:e',JSON.stringify(e))
					commonMethod.hideLoading(); 
					reject('网络错误');
				}
			});
	});
	return promise;
}


module.exports = {
	postRequest,
	getRequest,
	putRequest,
	delRequest
}

2.3 项目请求路径封装

    这里对服务端的请求路径进行封装

var packageMethod = require('./packageMethod.js'); 

// 绑定用户公众号openid post表单传参
export function apiA(data) {
  return packageMethod.postRequest("/user/apiA?gzhCode=", data,"application/x-www-form-urlencoded");
}

// 测试:post请求体传参
export function apiB(data) {
  return packageMethod.postRequest("/user/apiB", data);
}

// 测试:get请求体传参
export function apiC(data) {
  return packageMethod.getRequest("/user/apiC", data);
}

2.4 常用变量封装

    这是对常用的变量进行封装

 export default{
   serverUrl:"https://127.0.0.1:8081",
   notifyUrl:'http://fjj4qd.natappfree.cc/demo1/#/pages/notice/notice',
  }

2.5 页面使用

    方法使用举例,简单列一下常用的post表单传参、post请求体传参、get请求。

<template>
	<view class="content">
		<image class="logo" src="/static/logo.png"></image>
		<view class="text-area">
			<text class="title">{{title}}</text>
		</view>
	</view>
</template>

<script>
	import configInfo from '@/common/config.js'
	import {
		apiA,apiB,apiC
	} from '../../common/httpApi.js';
	export default {
		data() {
			return {
				title: 'Hello'
			}
		},
		onLoad() {
		},
		methods: {
			serverApiC(){
				apiC({
					'a': "123",
					'b': 5
				}).then(response => {
					console.log("response",response)
				}).catch((data) => {
					this.$commonMethod.showMsg(JSON.stringify(data.msg))
				})
			},
			serverApiB(){
				apiB({
					'userId': "123",
					'contentText': "5",
					'contentImg': "8",
				}).then(response => {
					console.log("response",response)
				}).catch((data) => {
					this.$commonMethod.showMsg(JSON.stringify(data.msg))
				})
			},
			serverApiA(){
				apiA({
					'gzhCode': "123"
				}).then(response => {
					console.log("response",response)
				}).catch((data) => {
					this.$commonMethod.showMsg(JSON.stringify(data.msg))
				})
			}
		}
	}
</script>

<style>
</style>

    以上是对uniapp请求的封装记录过程,如果感觉有帮助欢迎点赞收藏!
    最近参与了一个匿名社交的小程序,感兴趣的可以看一下!
在这里插入图片描述

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

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

相关文章

springBoot源码分析如何加载配置文件

前言&#xff1a;springBoot的版本是 2.2.4.RELEASE 一、入口 /*** Run the Spring application, creating and refreshing a new* {link ApplicationContext}.* param args the application arguments (usually passed from a Java main method)* return a running {link A…

DM5加密

MD5加密 概述 MD5&#xff08;Message Digest Algorithm 5&#xff09;是一种常用的哈希函数&#xff0c;能够将任意长度的消息压缩成一个128位的哈希值。它由Ronald Rivest在1991年设计&#xff0c;其设计目标是用来取代较早的MD4算法。 MD5算法通过多次处理分组数据来生成…

2023年5月青少年机器人技术等级考试理论综合试卷(三级)

青少年机器人技术等级考试理论综合试卷&#xff08;三级&#xff09;2023.06 分数&#xff1a; 100 题数&#xff1a; 30 一、 单选题(共 20 题&#xff0c; 共 80 分) 1.如图所示电路&#xff0c; 下列说法正确的是&#xff1f; &#xff08; &#xff09; A.电路中电阻 R3 和…

Kafka有几种消费者分区分配策略?

Range范围分配策略 Range范围分配策略是Kafka默认的分配策略&#xff0c;它可以确保每个消费者消费的分区数量是均衡的。 注意&#xff1a;Rangle范围分配策略是针对每个Topic的。 配置 配置消费者的partition.assignment.strategy为org.apache.kafka.clients.consumer.Ran…

JMeter如何从数据库中获取数据并作为变量使用?

目录 前言 1、JMeter连接MySQL数据库 2、线程组下新建一个 JDBC Connection Configuration 配置元件 3、实现数据库的查询-单值引用 4、实现数据库的查询-多值引用 总结&#xff1a; 前言 JMeter如何从数据库中获取数据并作为变量使用&#xff1f;这在我们使用JMeter做接…

Selenium Python教程第5章

5. 等待页面加载完成(Waits) 现在的大多数的Web应用程序是使用AJAX技术。当一个页面被加载到浏览器时&#xff0c;该页面内的元素可以在不同的时间点被加载。这使得定位元素变得困难。如果元素不再页面之中&#xff0c;会抛出 ElementNotVisibleException 异常。 使用 waits功能…

蓝桥杯单片机定时器不够用?PCA大力助你测距超声波!

在国赛的练习中遇到了定时器不够用的问题&#xff0c;也在网上有查阅到许多蓝桥杯单片机的用PCA定时器测距超声波的例子&#xff0c;但在移植实践运用了几个人的代码后总是各种各样的的问题不好用&#xff0c;因此深感有必要自己好好研究下&#xff0c;终于在一番摸爬中写出了用…

Shapr3d建模制图软件大学生教育优惠免费1年申请教程

前言介绍 shapr3d是iOS系统上一款专业的3D建模App&#xff0c;目前已经有window版本&#xff0c;主要搭配iPad Pro与Apple Pencil使用&#xff0c;它的特点是易学、方便与专业。我们可以使用它可以在几分钟内就可以把草图上的想法变成设计图。 从工程项目到珠宝设计&#xff…

ADAudit Plus:保护企业信息安全的强大内部审计解决方案

内部安全审计在现代企业中扮演着至关重要的角色。它是确保组织网络和系统安全的关键步骤&#xff0c;帮助企业发现和解决潜在的安全风险和漏洞。在这个信息技术高度发达的时代&#xff0c;保护企业的敏感数据和防范内部和外部威胁变得尤为重要。 内部安全审计 ADAudit Plus是一…

Windows本地账号数据迁移工具,可迁移本地账号数据到域账号,包括配置文件,桌面文件,浏览器收藏,聊天记录等。

Transwiz可以很容易地将您的个人数据和设置转移到新计算机: 用于备份和恢复用户配置文件的简单向导界面 下载链接 链接:https://pan.baidu.com/s/1LWmplUgHYg9ut3QLMnFslg?pwd=ogpx 提取码:ogpx 以下为Transwiz工具的使用教程实录: 创建一台虚拟机,我在上面简单模拟…

基于STL的 演讲比赛流程管理系统

目录 一、演讲比赛程序要求 1、比赛规则 2、程序功能 二、创建管理类 三、菜单功能 四、退出功能 五、演讲比赛功能 1、功能分析 2、创建选手类 3、进行比赛 4、保存分数 六、查看比赛记录 1、读取记录分数 2、查看记录功能 3、bug解决 七、清空功能 一、演讲比赛…

【Linux】信号(上)

文章目录 &#x1f4d5; 信号入门生活角度的信号技术角度的信号 &#x1f4d5; 信号产生认识 signal 函数键盘产生信号通过系统调用产生信号软件条件产生信号硬件异常产生信号 &#x1f4d5; 核心转储&#x1f4d5; 信号保存信号集函数 &#x1f4d5; 信号处理用户态与内核态处…

如何通过桥接模式重构代码?

文章目录 什么是桥接模式&#xff1f;UML结构图通用代码实现适用场景案例场景分析⽤⼀坨坨代码实现桥接模式重构代码代码实现⽀付类型桥接抽象类⽀付类型的实现定义⽀付模式接⼝测试 总结 同类的业务、同样的功能&#xff0c;怎么就你能写出来那么多if else。 很多时候你写出来…

【Web服务器】Tomcat的部署

文章目录 前言一、Tomcat 的概念1. Tomcat 核心组件1.1 什么是 servlet1.2 什么是 JSP 2. Tomcat 功能组件结构2.1 Container 结构分析 3. Tomcat 请求过程4. 配置文件4.1 安装目录4.2 conf 子目录 二、Tomcat 服务部署1. 下载并安装 JDK1.1 关闭防火墙&#xff0c;将安装 Tomc…

Milvus Lite 已交卷!轻量版 Milvus,主打就是一个轻便、无负担

想要体验世界上最快的向量数据库&#xff1f;缺少专业的工程师团队作为支撑&#xff1f;Milvus 安装环境受限&#xff1f; 别担心&#xff0c;轻量版 Milvus 来啦&#xff01; 在正式介绍 Milvus Lite 之前&#xff0c;先简单回顾一下 Milvus。Milvus 是一款开源的向量数据库&a…

logstash启动时默认连接本机节点elasticsearch问题

背景 今天在排查处理一个logstash读取kafka数据写入到hdfs的问题时候&#xff0c;发现在启动日志中多了个 logstash.outputs.elasticsearch 连接的地址是localhost:9200 部分日志如下&#xff1a; 排查过程说明 1、首先确认 logstash 启动的配置文件中的 output 配置&#x…

SonarQube Data Center Edition 10.0 Crack

使用{SonarQube}为团队和企业提供干净的代码 SonarQube Data Center Edition为开发团队提供深度集成到企业环境中的代码质量和安全解决方案;使您能够一致且可靠地部署干净的代码。 灵活性和治理&#xff1a;完美的企业代码质量工具 与您的企业环境深度集成 自我管理&#xff0…

【软件测试】软件测试的基本概念和开发模型

1. 前言 在进行软件测试的学习之前,我们要了解软件测试一些基本概念. 这些基本概念将帮助我们更加明确工作的目标以及软件测试到底要做什么. 2. 软件测试的基本概念 软件测试的基本概念有3个,分别是需求,测试用例和BUG. 2.1 需求 这里的需求还可以分为 用户需求和软件需求,用户…

【博客646】将消息队列放在Prometheus前以提高可靠性并不总是“好主意“

将队列放在Prometheus前以提高可靠性并不总是"好主意" 为了防止突发流量&#xff0c;而在prometheus前加上消息队列以达到削峰填谷的目的 架构如下&#xff1a; 应用程序将指标推送到某种形式的队列&#xff08;通常是 Kafka&#xff09;&#xff0c;暴露器二进制…

超详细IDEA创建Maven项目

文章目录 一、Maven概述二、创建Maven项目三、Maven项目简单介绍3.1 标准化的项目结构3.2 标准化的构建流程3.3 方便的依赖管理 一、Maven概述 Maven是一个专门用于管理和构建Java项目的工具。我们之所以要使用Maven&#xff0c;是因为Maven可以为我们提供一套标准化的项目结构…