当前位置: 首页 > news >正文

【微信小程序篇】-请求封装

最近自己在尝试使用AIGC写一个小程序,页面、样式、包括交互函数AIGC都能够帮我完成(不过这里有一点问题AIGC的上下文关联性还是有限制,会经常出现对于需求理解跑偏情况,需要不断的重复强调,并纠正错误,才能得到你想要的内容)。

因为最近某些原因,所处的环境网络没办法科学上网,剩下的网络交互需要自己完成。

请求封装

常用的请求方式:POST、GET
了解了一些网友们封装的方式,使用 Promise 来完成,Let’s do it。

1.动态配置环境:

env.config.js

const envConf = {//本地环境develop: {mode: 'dev',DEBUG: false,VCONSOLE: true,appid: '***',VUE_APP_BASE_URL: 'https://***',},//测试环境test: {mode: 'test',DEBUG: false,VCONSOLE: false,appid: '***',VUE_APP_BASE_URL: 'https://***',},//开发环境prod: {mode: 'prod',DEBUG: false,VCONSOLE: false,appid: '***',VUE_APP_BASE_URL: 'https://***',}
}
module.exports = {// 获取 envVersion是true的环境env: envConf[__wxConfig.envVersion]
}

2.封装请求

第一部分:基本信息处理

基本的环境信息及用户、租户、信息获取,不需要token的请求地址配置,需要统一处理code的数组配置

const app = getApp();
var tokenKey = "token";
var login_path = '/pages/login/login';
//请求url;引用的是env.config.js中对应环境的
var serverUrl = env.env.VUE_APP_BASE_URL;
var userInfo = wx.getStorageSync('userInfo');
var tenantid = '1'; //租户Id
if (!userInfo === '') {tenantid = userInfo.relTenantIds.split(',')[0];
}
import env from '../config/env.config'
// 例外不用token的地址
var exceptionAddrArr = ['/sys/login', ];
// 跳转到登录页的 code
var jumpLoginCodes = [1001,1002,1007,1009,1010,
]

第二部分:请求头设置

//请求头处理函数
function CreateHeader(url, type) {let header = {}if (type == 'POST_PARAMS') {header = {'content-type': 'application/x-www-form-urlencoded',}} else {header = {'content-type': 'application/json',}}if (exceptionAddrArr.indexOf(url) == -1) {//排除请求的地址不需要token的地址let token = wx.getStorageSync(tokenKey);// header.Authorization = token;//请求头携带token还有租户idheader['X-Access-Token'] = token;header['tenant-id'] = tenantid;}return header;
}

第三部分:请求封装

POST请求部分

//post请求,数据在body中
function postRequest(url, data) {let header = CreateHeader(url, 'POST');return new Promise((resolve, reject) => {wx.request({url: serverUrl + url,data: {...data,tenantId: tenantid},header: header,method: 'POST',success: (res => {if (res.statusCode === 200 && res.data && res.data.code === 200) {resolve(res)}//Token失效  跳转至登录页面else if (res.data && jumpLoginCodes.indexOf(res.data.code) > -1) {//移除失效tokenwx.removeStorageSync('token')//移除失效的用户信息wx.removeStorageSync('userInfo')//属于tabbar的页面,只能通过wx.switchTab来跳转// wx.switchTab({// 	url: login_path,// }) // 不属于 tabbar 的页面,需要通过 wx.navigateTo 来跳转wx.navigateTo({url: login_path});console.log("TOKEN失效");wx.showToast({icon: "none",title: (res.data && res.data.message) || "请求失败",});} else {wx.showToast({icon: "none",title: (res.data && res.data.message) || "请求失败",});reject(res)}setTimeout(_ => {wx.hideLoading();}, 500)}),fail: (res => {wx.hideLoading();console.log("err!!!!", err) wx.showToast({icon: "none",title: '请求失败',});reject(err)})})})
}
//post请求,数据按照query方式传给后端
function postParamsRequest(url, data) {let header = CreateHeader(url, 'POST_PARAMS');let useurl = url;console.log(useurl);return new Promise((resolve, reject) => {wx.request({url: serverUrl + useurl,header: header,method: 'POST',success: (res => {if (res.statusCode === 200 && res.data && res.data.code === 200) {resolve(res)}//Token失效  跳转至登录页面else if (res.data && jumpLoginCodes.indexOf(res.data.code) > -1) {//移除失效的用户信息wx.removeStorageSync('userInfo')//移除失效tokenwx.removeStorageSync('token')//属于tabbar的页面,只能通过wx.switchTab来跳转// wx.switchTab({// 	url: login_path,// }) // 不属于 tabbar 的页面,需要通过 wx.navigateTo 来跳转wx.navigateTo({url: login_path});wx.showToast({icon: "none",title: (res.data && res.data.message) || "请求失败",});} else {wx.showToast({icon: "none",title: (res.data && res.data.message) || "请求失败",});reject(res)}setTimeout(_ => {wx.hideLoading();}, 500)}),fail: (res => {wx.hideLoading();console.log("err!!!!", err) wx.showToast({icon: "none",title: '请求失败',});reject(err)})})})
}

GET请求部分

//get 请求
function getRequest(url, data) {let header = CreateHeader(url, 'GET');return new Promise((resolve,reject) => {wx.request({url: serverUrl + url,data: data,header: header,method: 'GET',success: (res => {//统一处理响应状态码if (res.statusCode === 200 && res.data && res.data.code === 200) {resolve(res)}//Token失效  跳转至登录页面else if (res.data && jumpLoginCodes.indexOf(res.data.code) > -1) {//移除失效的用户信息wx.removeStorageSync('userInfo')//移除失效tokenwx.removeStorageSync('token')//属于tabbar的页面,只能通过wx.switchTab来跳转// wx.switchTab({// 	url: login_path,// }) // 不属于 tabbar 的页面,需要通过 wx.navigateTo 来跳转wx.navigateTo({url: login_path});wx.showToast({icon: "none",title: (res.data && res.data.message) || "请求失败",});} else {wx.showToast({icon: "none",title: (res.data && res.data.message) || "请求失败",});reject(res)}setTimeout(_ => {wx.hideLoading();}, 500)}),fail: (res => {wx.hideLoading();console.log("err!!!!", err) wx.showToast({icon: "none",title: '请求失败',});reject(err)})})})
}

参考部分别人的内容,自己做了一些适合自己的判定改造,搞定。

相关文章:

【微信小程序篇】-请求封装

最近自己在尝试使用AIGC写一个小程序,页面、样式、包括交互函数AIGC都能够帮我完成(不过这里有一点问题AIGC的上下文关联性还是有限制,会经常出现对于需求理解跑偏情况,需要不断的重复强调,并纠正错误,才能得到你想要的…...

区块链-Web3.0-什么是Web3.0?

一、什么是Web 3.0 Web 3.0,也被称为“去中心化Web”或“智能Web”,是互联网的下一代,它使用了分布式系统技术、区块链技术和智能合约等新型技术,旨在构建一个更加去中心化、安全、透明和智能的互联网。Web 3.0 可以带来更广泛的…...

动手学深度学习(三)线性神经网络—softmax回归

分类任务是对离散变量预测,通过比较分类的概率来判断预测的结果。 softmax回归和线性回归一样也是将输入特征与权重做线性叠加,但是softmax回归的输出值个数等于标签中的类别数,这样就可以用于预测分类问题。 分类问题和线性回归的区别&#…...

ios swift alert 自定义弹框 点击半透明部分弹框消失

文章目录 1.BaseAlertVC2.BindFrameNumAlertVC 1.BaseAlertVC import UIKitclass BaseAlertVC: GLBaseViewController {let centerView UIView()override func viewDidLoad() {super.viewDidLoad()view.backgroundColor UIColor(displayP3Red: 0, green: 0, blue: 0, alpha:…...

HCIP STP(生成树)

目录 一、STP概述 二、生成树协议原理 三、802.1D生成树 四、STP的配置BPDU 1、配置BPDU的报文格式 2、配置BPDU的工作过程 3、TCN BPDU 4、TCN BPDU的工作过程 五、STP角色选举 1、根网桥选举 2、根端口选举 3、指定端口选举 4、非指定端口选举 六、STP的接口状…...

【Unity开发必备】100多个 Unity 学习网址 资源 收藏整理大全【持续更新】

Unity 相关网站整理大全 众所周知,工欲善其事必先利其器,有一个好的工具可以让我们事半功倍,有一个好用的网站更是如此! 但是好用的网站真的太多了,收藏夹都满满的(但是几乎没打开用过😁)。 所以本文是对…...

Alpine Ridge控制器使其具备多种使用模式 - 英特尔发布雷电3接口:竟和USB Type-C统一了

同时又因为这建立在Type-C的基础上,雷电3也将利用现有的标准Type-C线缆引入有源支持。当使用Type-C的线缆时,雷电的速度就降到了20Gbps全双工——这与普通的Type-C的带宽相同——这是为了成本牺牲了一些带宽。可以比较一下,Type-C线的成本只有…...

容器——2.Collection 子接口之 List

文章目录 2.1. Arraylist 和 Vector 的区别?2.2. Arraylist 与 LinkedList 区别?2.2.1. 补充内容:双向链表和双向循环链表2.2.2. 补充内容:RandomAccess 接口 2.3 ArrayList 的扩容机制 2.1. Arraylist 和 Vector 的区别? ArrayList 是 List 的主要实现类,底层使…...

【工作记录】docker安装gitlab、重置密码@20230809

前言 本文记录下基于docker安装gitlab并重置管理员密码的过程。 作为记录的同时也希望能帮助到需要的朋友们。 搭建过程 1. 准备好docker环境并启动docker [rootslave-node1 docker-gitlab]# docker version Client:Version: 18.06.1-ceAPI version: 1.38…...

数据挖掘的基本概念和大数据的特点

数据挖掘是指从大量数据中提取有价值的信息或模式的过程。它通常使用计算机技术来分析数据,并利用统计学、机器学习、人工智能等方法来发现数据中的隐藏规律、趋势和关联性。 数据挖掘的基本概念包括以下几个方面: 数据预处理:对原始数据进行…...

LabVIEW开发分段反射器测试台

LabVIEW开发分段反射器测试台 随着对太空的观察需求越来越远,而不是当前技术(如哈勃望远镜)所能达到的,有必要增加太空望远镜主镜的尺寸。但是,增加主镜像的大小时存在几个问题。随着反射镜尺寸的增加,制造…...

二级python和二级c哪个简单,二级c语言和二级python

大家好,小编为大家解答二级c语言和二级office一起报可以吗的问题。很多人还不知道计算机二级c语言和python哪个好考,现在让我们一起来看看吧! 介绍Python有很多库和使用Qt编写的接口,这自然创建c调用Python的需求。一路摸索,充满艰辛的添加头…...

E: Package ‘curl‘ has no installation candidate/ E:软件包没有可用的安装源

解决方案: 访问etc/apt/source.list 修改或者添加安装源 不用版本的Linux 有不同的配置比如我的是Debian 12 其他版本的去搜索引擎搜索即可 vim /etc/apt/source.list 改成修改或添加 // 以下是官方示例 deb http://deb.debian.org/debian bookworm main non-…...

代理模式及常见的3种代理类型对比

代理模式及常见的3种代理类型对比 代理模式代理模式分类静态代理JDK动态代理CGLIB动态代理Fastclass机制 三种代理方式之间对比常见问题 代理模式 代理模式是一种设计模式,提供了对目标对象额外的访问方式,即通过代理对象访问目标对象,这样可…...

8.6 校招 内推 面经

绿泡泡: neituijunsir 交流裙,内推/实习/校招汇总表格 1、面经 | 车载测试-23 面经 | 车载测试-23 2、校招 | 荣耀2024届全球校园招聘启动(内推) 校招 | 荣耀2024届全球校园招聘启动(内推) 3、校招 |…...

【大数据之Flume】七、Flume进阶之自定义Sink

(1)概述:   Sink 不断地轮询 Channel 中的事件且批量地移除它们,并将这些事件批量写入到存储或索引系统、或者被发送到另一个 Flume Agent。 Sink 是完全事务性的。在从 Channel 批量删除数据之前,每个 Sink 用 Chan…...

vue对于时间的处理

2023-08-05 11:25:45 假如这个就是我们要传的时间字符串 比如今天是2023-08-05(同一天):现在把这个时间字符串传入到 formatDate()这个方法,就会给你返回 11:25 比如今天是2023-08-06(前一天&a…...

Apache DolphinScheduler 3.1.8 版本发布,修复 SeaTunnel 相关 Bug

近日,Apache DolphinScheduler 发布了 3.1.8 版本。此版本主要基于 3.1.7 版本进行了 bug 修复,共计修复 16 个 bug, 1 个 doc, 2 个 chore。 其中修复了以下几个较为重要的问题: 修复在构建 SeaTunnel 任务节点的参数时错误的判断条件修复 …...

科技云报道:一波未平一波又起?AI大模型再出邪恶攻击工具

AI大模型的快速向前奔跑,让我们见识到了AI的无限可能,但也展示了AI在虚假信息、深度伪造和网络攻击方面的潜在威胁。 据安全分析平台Netenrich报道,近日,一款名为FraudGPT的AI工具近期在暗网上流通,并被犯罪分子用于编…...

深度对话|如何设计合适的网络经济激励措施

近日,我们与Mysten Labs的首席经济学家Alonso de Gortari进行了对话,讨论了如何在网络运营商和参与者之间找到激励措施的平衡,以及Sui的经济如何不断发展。 是什么让您选择将自己的经济学背景应用于区块链和Web3领域? 起初&…...

OpenClaw环境迁移指南:千问3.5-9B配置备份与恢复

OpenClaw环境迁移指南:千问3.5-9B配置备份与恢复 1. 为什么需要环境迁移? 上周我的主力开发机突然硬盘故障,导致OpenClaw的整套配置丢失。重新搭建环境时,光是飞书通道的授权验证就花了2小时,更别提那些精心调试的自…...

知识表示是什么:为什么人工智能离不开知识表示

人工智能不仅要处理数据,还要理解对象、关系、规则和约束。要做到这一点,系统就不能只保存原始记录,而必须把有关内容组织成机器能够处理的形式,这就是知识表示。知识表示并不是人工智能中的附属技术,而是智能系统建立…...

卡证检测矫正模型效果对比:矫正前后OCR字符识别准确率提升数据

卡证检测矫正模型效果对比:矫正前后OCR字符识别准确率提升数据 1. 引言:为什么卡证矫正如此重要? 想象一下这个场景:你用手机拍了一张身份证照片,准备上传到某个App里。照片拍得有点歪,身份证的四个角在画…...

WiiChuk_compat:高兼容Nunchuk驱动库详解

1. WiiChuk_compat 库概述WiiChuk_compat 是一个专为嵌入式平台设计的开源 Arduino 兼容库,其核心目标是实现对任天堂 Wii 遥控器扩展配件——Nunchuk(常被误拼为 “Numchuck”、“Nunchuck” 或 “Nunchuk”)的高可靠性、宽兼容性 IC 接口驱…...

OpenClaw学术研究流:Phi-3-mini-128k-instruct自动生成论文综述

OpenClaw学术研究流:Phi-3-mini-128k-instruct自动生成论文综述 1. 为什么需要自动化文献综述 每次开始新的研究课题时,最让我头疼的就是文献综述环节。作为独立研究者,我常常需要花费数周时间阅读上百篇论文,手动整理关键观点和…...

Synopsys Multivoltage Flow User Guide(汉化笔记)

1 Low-Power Design Strategies 1.1 Increasing Challenges of Power 早期的IC设计中EDA工具更多的优化方向是性能和面积,功耗考虑的比较少,但是,现在的设计CMOS器件密度和时钟频率都在提升,功耗重要性也更加明显,供电电压和晶体管阈值电压也在降低,漏电电流也成为无法忽…...

OpenClaw多通道接入:百川2-13B-4bits量化版同时对接飞书与钉钉

OpenClaw多通道接入:百川2-13B-4bits量化版同时对接飞书与钉钉 1. 为什么需要多通道接入? 上周我团队遇到一个典型问题:产品、研发、运营三个小组分别使用钉钉和飞书作为主要沟通工具。每次需要协调资源时,要么在不同平台反复切…...

这个免费AI工具太狠了:我每周省下10小时学习时间

这个免费AI工具太狠了:我每周省下10小时学习时间 改写自 The PyCoach 于 2026 年 3 月 20 日发布的文章《NotebookLM: The Best AI Tool to Learn Any Topic Faster》,并参考 Diana Dovgopol 的共同观点。 很多人以为,学习慢,是因…...

固态新概念—准固态,或许车用准固态,手机用全固态,无奈的妥协

固态电池说了很多年了,但是到了如今离量产装车越来越近的时刻,电池行业和汽车行业终于清醒认识到全固态电池在汽车行业面临着无法跨越的技术难题,由此近期行业提出了一个新概念,那就是准固态电池。此前汽车行业曾提出了半固态电池…...

ADS1X15高精度I²C ADC驱动开发与工程实践指南

1. ADS1X15库深度解析:面向嵌入式工程师的高精度IC ADC驱动开发指南ADS1X15系列(ADS1015/ADS1115)是德州仪器(TI)推出的低功耗、高精度Δ-Σ模数转换器,广泛应用于工业传感、电池监测、环境数据采集等对模拟…...