Uniapp 小程序接口封装与使用

深入理解 Uniapp 小程序接口封装与使用

在 Uniapp 小程序开发中,接口请求是获取和交互数据的关键部分。合理地封装接口不仅能提高代码的可维护性,还能增强项目的健壮性。今天,我们就来详细探讨一下如何在 Uniapp 中进行接口封装、引入以及使用。

一、接口封装原理

接口封装的核心目的是将复杂的请求逻辑进行抽象,使得在不同页面调用接口时更加简洁和统一。通过封装,我们可以集中处理诸如请求地址拼接、请求头设置、加载状态管理、错误处理以及登录状态验证等通用操作。

二、具体实现步骤

(一)创建请求封装文件

utils 目录下创建 request.js 文件,这是我们接口封装的核心代码所在。

// const BASEURL = 'http://xxx.xxx' 
const BASEURL = 'https://xxx.xxx.fun';/** 全局请求封装* @param path 请求路径* @param method 请求类型(GET/POST/DELETE等)* @param data 请求体数据* @param loading 请求未完成是是否显示加载中,默认为true* @param needToken 是否需要token,默认为false*/
export default (path, method, data = {}, loading = true, needToken = false) => {// 获取存储tokenconst token = uni.getStorageSync("token");// 判断token是否存在且接口是否需要tokenif (!token && needToken) {// const showToastMessage = (message) => {//     uni.showToast({//         icon: "none",//         title: message//     });// };// showToastMessage('请登录后操作');return;}if (loading) {uni.showLoading({title: "加载中",mask: true});};// 根据接口是否需要token以及token是否存在来决定调用的请求函数if (needToken && 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('响应拦截');if (response.statusCode === 401) {// 若本地存在token,清除tokenconst token = uni.getStorageSync("token");if (token) {// uni.removeStorageSync('token');}// 提示用户请先登录uni.showToast({icon: "none",title: '请登录后操作',duration: 1000});return// 去登录}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) {if (response.statusCode === 401) {// 清除本地存储的token// uni.removeStorageSync('token');// 提示用户请先登录// uni.showToast({//     icon: "none",//     title: '请登录后操作',//     duration: 1000// });return// 去登录}// console.log(response.data);resolve(response.data);},fail(err) {uni.showToast({icon: "none",title: '服务响应失败'});console.error(err);reject(err);},complete() {uni.hideLoading();}});});
}export {BASEURL
}

代码解析

  1. 基础 URL 定义:首先定义了 BASEURL,这是所有接口请求的基础地址。在实际项目中,根据后端接口的部署地址进行修改。
  2. 全局请求封装函数export default 导出的函数接收五个参数,分别是请求路径 path、请求类型 method、请求体数据 data、是否显示加载状态 loading 以及是否需要 token 的标识 needToken。在函数内部,首先获取本地存储的 token,如果接口需要 token 但 token 不存在,则直接返回,提示用户登录(这里的提示代码被注释,实际使用时可根据需求开启)。如果 loading true,则显示加载提示。最后根据是否需要 token 以及token 是否存在,调用不同的请求函数。
  3. 无token请求函数 noTokenRequest:返回一个 Promise,使用 uni.request 发起请求。在成功回调中,如果响应状态码为 401,表示未授权,若本地存在 token则清除(注释部分,可根据需求启用),并提示用户登录。若请求成功,将响应数据通过resolve返回。在失败回调中,显示错误提示并通过 reject 抛出错误。无论请求成功与否,在 complete 回调中隐藏加载提示。
  4. 有token请求函数 tokenRequest:与 noTokenRequest 类似,只是在请求头中添加了 token

(二)创建业务接口文件

utils目录下创建 user.js 文件,用于定义与用户相关的接口。

import request from './request.js'; // 封装的request.js文件的位置export const checkUser = (data) => {return request('/api/xxx/xxx', 'POST', data, true, true)
}

代码解析
通过导入 request.js 中封装的请求函数,定义了 checkUser 接口函数。该函数调用 request 并传入特定的请求路径、请求类型、请求数据、是否显示加载以及是否需要 token 等参数,从而实现对用户相关接口的封装。

三、接口的引入与使用

(一)在页面中引入接口

page/index/index.vue 页面中引入 user.js 中定义的接口。

import {checkUser
} from '@/utils/api/user.js'

(二)在页面方法中使用接口

async handleSend() {try {const res = await checkUser(this.id);// 这里可以对接口返回的数据进行进一步处理} catch (error) {// 捕获接口请求过程中的错误console.error('接口请求错误:', error);}
}

代码解析

  1. 使用 async/await 语法来处理异步请求,使得代码看起来更像是同步执行,提高代码的可读性。
  2. 在 try 块中调用 checkUser 接口,并传入 this.section_id 作为请求数据。接口返回的数据会赋值给 res,之后可以对res进行进一步的数据处理和业务逻辑操作。
  3. catch块中捕获接口请求过程中可能出现的错误,并进行相应的错误处理,比如在控制台打印错误信息。

四、总结

通过上述步骤,我们完成了 Uniapp小程序中接口的封装、引入和使用。这种封装方式使得代码结构更加清晰,每个部分各司其职,便于维护和扩展。在实际项目中,我们可以根据不同的业务模块创建更多的接口文件,进一步细化接口封装,提高开发效率。

希望这篇文章能帮助大家更好地掌握 Uniapp 小程序接口相关的开发技巧。如果在实践过程中有任何疑问或遇到问题,欢迎随时交流讨论。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

生成对抗网络(GAN)

生成对抗网络(GAN):生成对抗网络是一种深度学习模型,由 Ian Goodfellow 等人在 2014 年提出。GAN由生成器和判别器组成,生成器生成假数据,判别器区分真假数据。两者通过对抗训练不断提升,最终生成器能够生成…

FastJSON 默认行为:JSON.toJSONString 忽略 null 字段

完整的 FakeRegistrationController 代码,这让我可以全面分析后端逻辑,特别是为什么空的字段(如 compareDate)不返回给前端。我将详细分析代码的每个接口,尤其是与 list 请求和字段返回相关的部分,并解释原…

网络通信/IP网络划分/子网掩码的概念和使用

文章目录 概述子网的考题子网掩码的历史有/无类地址子网划分!子网掩码超网技术/CIDR子网掩码和路由IP子网掩码定义 网络规划网络规划-拆子网网络规划-组超网子网划分案例 区分于其他特殊IP地址IP地址和网络地址子网掩码和网络地址子网掩码和广播地址 子网间的通信其他 概述 本…

中国的Cursor! 字节跳动推出Trae,开放Windows版(附资源),开发自己的网站,内置 GPT-4o 强大Al模型!

Trae是什么 Trae 是字节跳动推出的免费 AI IDE,通过 AI 技术提升开发效率。支持中文,集成了 Claude 3.5 和 GPT-4 等主流 AI 模型,完全免费使用。Trae 的主要功能包括 Builder 模式和 Chat 模式,其中 Builder 模式可帮助开发者从…

SpringBatch简单处理多表批量动态更新

项目需要处理一堆表,这些表数据量不是很大都有经纬度信息,但是这些表的数据没有流域信息,需要按经纬度信息计算所属流域信息。比较简单的项目,按DeepSeek提示思索完成开发,AI真好用。 阿里AI个人版本IDEA安装 IDEA中使…

C++ | 高级教程 | 文件和流

👻 概念 文件流输出使用标准库 fstream,定义三个新的数据类型: 数据类型描述ofstream输出文件流,用于创建文件并向文件写入信息。ifstream输入文件流,用于从文件读取信息。fstream文件流,且同时具有 ofst…

0.MySQL安装|卸载内置环境|配置官方yum源|安装mysql|登录mysql|设置配置文件(centos8.2)

卸载内置环境 检查是否有mariadb和mysql服务 ps ajx |grep mariadb ps ajx |grep mysql停止mysql服务 systemctl stop mysqld找到mysql安装包 rpm -qa | grep mysql删除安装包 rpm -qa | grep mysql | xargs yum -y remove检查 ls /etc/my.cnfls /var/lib/mysql/配置官方…

第2章_保护您的第一个应用程序

第2章_保护您的第一个应用程序 在本章中,您将学习如何使用 Keycloak 保护您的第一个应用程序。为了让事情更有趣,您将运行的示例应用程序由两部分组成,前端 Web 应用程序和后端 REST API。这将向您展示用户如何向前端进行身份验证&#xff0…

将DeepSeek接入vscode的N种方法

接入deepseek方法一:cline 步骤1:安装 Visual Studio Code 后,左侧导航栏上点击扩展。 步骤2:搜索 cline,找到插件后点击安装。 步骤3:在大模型下拉菜单中找到deep seek,然后下面的输入框输入你在deepseek申请的api key,就可以用了 让deepseek给我写了一首关于天气的…

QListView实现文件选择功能

一.效果 这个功能很常用,但是最高效的做法是先让左侧的源列表默认排序,然后再进行文件选择,这样在选择操作后,无论是源列表还是目标列表,都能很容易保证原来的顺序。 二.实现 mainwindow.h #ifndef MAINWINDOW_H #define MAINWINDOW_H#include <QMainWindow> #in…

组件传递props校验

注意&#xff1a;prop是只读的&#xff01;不可以修改父组件的数据。 可以检验传过来的内容是否类型没问题。 App.vue <template><div><!-- <parentDemo/> --><componentA/></div></template> <script> import ComponentA …

好用的Docker项目:本地部署IOPaint打造专属在线图片处理工作站

文章目录 前言1.什么是IOPaint&#xff1f;2.本地部署IOPaint3.IOPaint简单实用4.公网远程访问本地IOPaint5.内网穿透工具安装6.配置公网地址7.使用固定公网地址远程访问总结 前言 在这个快节奏的时代&#xff0c;一张完美的照片往往能带来意想不到的效果。但有时候&#xff0…

P8716 [蓝桥杯 2020 省 AB2] 回文日期

1 题目说明 2 题目分析 暴力不会超时&#xff0c;O(n)的时间复杂度&#xff0c; < 1 0 8 <10^8 <108。分析见代码&#xff1a; #include<iostream> #include<string> using namespace std;int m[13]{0,31,28,31,30,31,30,31,31,30,31,30,31};// 判断日期…

Redisson使用场景及原理

目录 一、前言 二、安装Redis 1、Windows安装Redis ​2、启动方式 3、设置密码 三、项目集成Redission客户端 1、引入依赖 四、实用场景 1、操作缓存 2、分布式锁 3、限流 3.1 创建限流器 3.2 设置限流参数 3.3 获取令牌 3.4 带超时时间获取令牌 3.5 总结 一、…

观成科技:海莲花“PerfSpyRAT”木马加密通信分析

1.概述 在2024年9月中旬至10月&#xff0c;东南亚APT组织“海莲花”通过GitHub发布开源安全工具项目&#xff0c;针对网络安全人员发起了定向攻击。通过对相关攻击活动进行分析&#xff0c;可以将其与一些海莲花的样本关联起来。这些样本的通信数据结构与海莲花此前使用的攻击…

如何在docker上部署java服务

目录结构 首先 Dockerfile FROM bladex/alpine-java:openjdk17_cn_slimMAINTAINER admin@rsz.comENV TZ=Asia/ShanghaiRUN ln -sf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezoneRUN mkdir -p /xhWORKDIR /xhEXPOSE 8106ADD ./blade-system.…

Hive从入门到运用

hive简介 hive的设计思想&#xff08;本质是一个翻译器&#xff09; 上传安装包 解压&#xff0c;查看 运行hive&#xff08;一定要启动hadoop&#xff0c;是有依赖关系的。&#xff09; 测试启动方法&#xff0c;和建表 文件创建很上传到hdfs&#xff0c;直接上传到hive表的目…

使用消息队列怎样防止消息重复?

大家好&#xff0c;我是君哥。 使用消息队列时&#xff0c;我们经常会遇到一个可能对业务产生影响的问题&#xff0c;消息重复。在订单、扣款、对账等对幂等有要求的场景&#xff0c;消息重复的问题必须解决。 那怎样应对重复消息呢&#xff1f;今天来聊一聊这个话题。 1.三…

【单片机】MSP430MSP432入门

文章目录 0 前言1 开发方式选择2 CCS和开发相关软件3 Keil开发MSP4324 IAR for 430开发MSP4305 总结 0 前言 最近因为想学DSP&#xff0c;所以把之前卸载的CCS给装回来了&#xff0c;手头也还有之前电赛剩下的MSP430和MSP432的板子&#xff0c;由于年代久远&#xff0c;想着花点…

[记录贴] 火绒奇怪的进程保护

最近一次更新火绒6.0到最新版&#xff0c;发现processhacker的结束进程功能无法杀掉火绒的进程&#xff0c;弹窗提示如下&#xff1a; 可能是打开进程时做了权限过滤&#xff0c;火绒注册了两个回调函数如下&#xff1a; 但奇怪的是&#xff0c;在另外一台机器上面更新到最新版…