小程序请求封装、使用

news/2024/10/18 1:33:15/

小程序请求封装

在这里插入图片描述

1、要了解方法

1.1、wx.request()

wx.request 发起 HTTPS 网络请求。(详情点击wx.request查看官方文档)

1.2、wx.showModal()

wx.showModal 显示模态对话框。(详情点击wx.showModal查看官方文档)

1.3、wx.showLoading()

wx.showLoading 显示 loading 提示框。需主动调用 wx.hideLoading 才能关闭提示框。(详情点击wx.showLoading查看官方文档)

2、封装

2.1 定义常量信息

const baseUrl = 'https://xxx.xxx.cn';
const SUCCESS_CODE = "0" 
const FAIL_CODE = "-1"
const EXPIRE_CODE = "300001"
// 不需要携带 sessionKey 的白名单
const urlList = ['/wxMall/weixin/api/user/login'
]

2.2 封装方法

2.2.1 封装showModal方法

展示错误信息

/*** 提示框 方法* @param {String} msg 展示信息* @param {Function} confirm 点击确定的回调函数*/
function showModal(msg, confirm,confirmText = "确定") {wx.showModal({title: '提示',content: msg,showCancel: false,confirmText,success: res => {if (res.confirm) confirm()}})
}

2.2.2 封装request方法

发起 HTTPS 网络请求

function request(url, method = "GET", data = {}, config) {wx.showLoading({title: '加载中',mask: true})// 设置请求头const header = {'content-type': 'application/json',...config};// 需要加 sessionKey 的 url,将白名单中url过滤掉const requiresToken = !urlList.some(s => url.includes(s));if (requiresToken) header["wx-session"] = wx.getStorageSync('sessionKey');return new Promise((resolve, reject) => {wx.request({url: baseUrl + url,method,header,data, success: res => {if (res.data.code === SUCCESS_CODE) resolve(res.data);},complete: err => {// 关闭loadingwx.hideLoading();// 登录过期时,重新登录if (err.data.code === EXPIRE_CODE) {wx.removeStorageSync('sessionKey')wx.removeStorageSync('authorize')showModal(err.data.message, async () => {await wxLogin()wx.redirectTo({url: `/${getCurPageUrl()}`,})}, "登录")}// 正常的错误信息展示if (err.data.code === FAIL_CODE)  showModal(err.data.message, () => {})}})})
}

2.2.3 封装get方法

/*** GET请求封装* @param {String} url 请求地址* @param {object} data 请求入参* @param {object} config 请求配置 header,如 content-type*/
const get = (url, data = {}, config = {}) => request(url, "GET", data, config)

2.2.4 封装post方法

/*** POST请求封装* @param {String} url 请求地址* @param {object} data 请求入参* @param {object} config 请求配置 header,如 content-type*/
const post = (url, data = {}, config = {}) => request(url, "POST", data, config)

2.2.5 封装 login 方法

登录微信

function wxLogin() {return new Promise((resolve, rejext) => {// 登录wx.login({success: async res => {const { data: {sessionKey, authorize} } = await post(`/wxMall/xxx/api/xxx/login/${res.code}`, null, {"content-type": "application/x-www-form-urlencoded"})wx.setStorageSync('sessionKey',sessionKey);wx.setStorageSync('authorize', authorize);resolve()}})})
}

2.2.6 封装 getCurPageUrl 方法

获取当前页面url信息

function getCurPageUrl() {const pages = getCurrentPages(); // 获取加载的页面const curPage = pages[pages.length - 1]; // 获取当前页面的对象const options = Object.entries(curPage.options);const params = options.map(([key, value]) => `${key}=${value}`).join('&');const url = `${curPage.route}?${params}`;return url;
}

3、完整封装

在项目中创建api文件夹 用于放 request.js(请求封装) 和 index.js(api封装)

request.js

const baseUrl = 'https://xxx.xxx.cn';
const SUCCESS_CODE = "0" 
const FAIL_CODE = "-1"
const EXPIRE_CODE = "300001"
// 不需要携带 sessionKey 的白名单
const urlList = ['/wxMall/xxx/api/xxx/login'
]/*** 提示框 方法* @param {String} msg 展示信息* @param {Function} confirm 点击确定的回调函数*/
function showModal(msg, confirm,confirmText = "确定") {wx.showModal({title: '提示',content: msg,showCancel: false,confirmText,success: res => {if (res.confirm) confirm()}})
}/*** 获取当前页面url 方法*/
function getCurPageUrl() {const pages = getCurrentPages(); // 获取加载的页面const curPage = pages[pages.length - 1]; // 获取当前页面的对象const options = Object.entries(curPage.options);const params = options.map(([key, value]) => `${key}=${value}`).join('&');const url = `${curPage.route}?${params}`;return url;
}function wxLogin() {return new Promise((resolve, rejext) => {// 登录wx.login({success: async res => {const { data: {sessionKey, authorize} } = await post(`/wxMall/xxx/api/xxx/login/${res.code}`, null, {"content-type": "application/x-www-form-urlencoded"})wx.setStorageSync('sessionKey',sessionKey);wx.setStorageSync('authorize', authorize);resolve()}})})
}function request(url, method = "GET", data = {}, config) {wx.showLoading({title: '加载中',mask: true})// 设置请求头const header = {'content-type': 'application/json',...config};// 需要加 sessionKey 的 url,将白名单中url过滤掉const requiresToken = !urlList.some(s => url.includes(s));if (requiresToken) header["wx-session"] = wx.getStorageSync('sessionKey');return new Promise((resolve, reject) => {wx.request({url: baseUrl + url,method,header,data, success: res => {if (res.data.code === SUCCESS_CODE) resolve(res.data);},complete: err => {// 关闭loadingwx.hideLoading();// 登录过期时,重新登录if (err.data.code === EXPIRE_CODE) {wx.removeStorageSync('sessionKey')wx.removeStorageSync('authorize')showModal(err.data.message, async () => {await wxLogin()wx.redirectTo({url: `/${getCurPageUrl()}`,})}, "登录")}// 正常的错误信息展示if (err.data.code === FAIL_CODE)  showModal(err.data.message, () => {})}})})
}/*** GET请求封装* @param {String} url 请求地址* @param {object} data 请求入参* @param {object} config 请求配置 header,如 content-type*/
const get = (url, data = {}, config = {}) => request(url, "GET", data, config)/*** POST请求封装* @param {String} url 请求地址* @param {object} data 请求入参* @param {object} config 请求配置 header,如 content-type*/
const post = (url, data = {}, config = {}) => request(url, "POST", data, config)module.exports = {get,post,wxLogin
}

index.js

const {get,post
} = require("./request")const config = {"content-type": "application/x-www-form-urlencoded"
}
const api = {// 授权接口authorizeLogin: data => post(`/wxMall/xxx/api/xxx/authorizeLogin`, data),// 权益销售列表rightsSaleList: data => get(`/wxMall/xxx/list`, data, config),// 权益订单列表rightsOrderList: data => get(`/wxMall/xxx/list`, data),...};
module.exports = {...api
}

4、使用

// 引入
const { rightsSaleList } = require("../../api/index")Page({data:{pageNum: 1, pageSize: 10, },async getList(){const { pageNum, pageSize } = this.data;const params = { pageNum, pageSize};// 使用const res = await rightsSaleList(params);console.log(res)}
})

http://www.ppmy.cn/news/486068.html

相关文章

设备台式计算机显示叹号,台式电脑显示感叹号怎么办,快速解决win7网络图标黄色问题...

随着电脑的普遍,电脑网络问题也是越来越多,最近常有朋友反映win7网络图标黄色问题,win7网络图标黄色是一个非常常见的问题,几乎隔三差五就会有win7网络图标黄色的情况发生,所以今天小编教大家快速解决win7网络图标黄色…

Windows 无法连接打印机,请检查打印机名并重试。如果这是网络打印机,请确保打印机已打开,并且打印机地址正确。报错代码:0x00000709

一、连接打印机报错信息 二、打开打印机报错信息 ​​​​ 三、解决办法: 1、打开设置 2、打开更新和安全 3、查看跟新历史记录 4、如果你的系统更新了:KB50066xx这个版本 那么就卸载这个系统版本 5、卸载更新 6、右击卸载,等待系统还原就…

打印机 正在删除正在打印怎么也删除不了

打印机 第一个文档的状态为:正在删除正在打印,怎么也删除不了 解决方案: 方法1: 1、打印机长时间工作,导致出现问题。单击“开始”-“运行”,打入services.msc ,在服务列表中,找到“Print Spooler”服务把它…

磁盘一把锁一个感叹号_Win10系统中如何解决磁盘图标上出现感叹号的情况

在使用win10系统的过程中,有的小伙伴遇到了这样一个问题:在开机后,某个磁盘图标上出现了一个黄色三角警示状态的感叹号标志,那么这是怎么一回事呢?其实这是由于系统中开启了磁盘加密功能“BitLocker 驱动器加密”所导致…

联想服务器显示叹号,桌面图标出现“红色叹号”

故障现象: 桌面快捷键图标出现“红叹号”现象如图所示: 桌面的图标打开正常,但图标上均出现红色的“!”标志,此类情况该如何处理呢?解决方案: 经核实,此类叹号是由于随机杀毒软件 迈克菲Mcafee 软件的“在线…

控制面板里打印服务器显示叹号,win7系统打印机显示叹号无法打印的解决方法...

很多小伙伴都遇到过win7系统打印机显示叹号无法打印的困惑吧,一些朋友看过网上零散的win7系统打印机显示叹号无法打印的处理方法,并没有完完全全明白win7系统打印机显示叹号无法打印是如何解决的,今天小编准备了简单的解决办法,只…

eclipse工程图标上有个红色感叹号

在做android开发的时候,尤其是从其他地方拷贝来并且直接加载的工程,刚打开往往会看到工程的图标上有个红色的感叹号,这是因为 build path 出错了,里面有缺失或者无法找到的包。 在android工程图标上点击右键,进入buil…

Git本地仓库的文件夹不显示红色感叹号、绿色对号等图标

1.问题描述 重装系统之后,我下载了Git,能使用。但是Git的本地仓库却不显示红色和绿色对钩等标识。 2.问题解决 (1)首先保证电脑本机上有TortoiseGit这个软件 没有的话,先下载一个!!! &…