uni-app (安卓、微信小程序)接口封装 token失效自动获取新的token

一、文件路径截图

1、新建一个文件app.js存放接口

//这里存放你需要的接口
 
import {request} from '@/utils/request.js' //这个文件是请求逻辑处理
module.exports = {
	// 登录 -- 注册
	perssonRegister: (data) => { // 供应商注册 
		return request({
			url: 'manageWx/Login/perssonRegister',
			method: "post",
			data
		})
	}
},

2、新建一个文件request.js

const host = "http://192.168.1.10:8081/jeecg-boot/" //这个是本地地址,项目上线可以换成线上
export const request = (options) => {
	console.log(options, `调用接口`)
	return new Promise((resolve, reject) => {
		const WXUSER = uni.getStorageSync('WXUSER');
		if (!options.url) {
			console.error('请传入URL')
			return;
		}
		if (!WXUSER.rememberToken) {
			wxlogin(options).then(() => {
				sendRequest(options, resolve, reject);
			});
		} else {
			sendRequest(options, resolve, reject);
		}
	})
};
//封装的发送请求函数
function sendRequest(options, resolve, reject) {
	const WXUSER = uni.getStorageSync('WXUSER');
	uni.request({
		url: options.url,
		data: options.data || '',
		method: options.method || 'POST',
		header: {
			"X-Access-Token": WXUSER.rememberToken,
		},
		success: (res) => {
			if (res.data.code == 401) {
				console.log('返回401')
				wxlogin(options).then(() => {
					sendRequest(options, resolve, reject);
				});
			} else resolve(res.data)
		}
	})
};
//  token失效请求微信的无痕登录   app 就换成自己的登录接口
export async function wxlogin(options) {
	return new Promise((resolve, reject) => {
		uni.getUserInfo({
			success: (UserRes) => {
				uni.login({
					desc: 'weixin',
					success: res => {
						wx.request({
							url: `${host}manageWx/Login/queryUserByPhone`, //换成在自己登录接口
							method: 'POST',
							data: {
								weappCode: res.code,
							},
							success: res => {
								if (res.data.success) {
									console.log(res.data.result.wxUser)
									const WXUSER = res.data.result.wxUser
									const SYSUSER = res.data.result.sysUser
									uni.setStorageSync('WXUSER',WXUSER);
									uni.setStorageSync('SYSUSER',SYSUSER);
									resolve(); // 登录成功后,返回resolve
								} else {
									console.log('登录错误', res)
									reject(); // 登录失败时,返回reject
								}
							}
						});
					}
				});
			}
		})
	});
};
module.exports = {
	request,
	host
}

3、页面使用

<!--@ 商品列表 -->
<template>
	

</template>
<script>
	import {perssonRegister} from '@/utils/app.js' //调用接口使用
	export default {
		name: "PlaceOrderGoods",
		
		data() {
			return {
				dataSource: [],
				
			};
		},

	
		onLoad() {
		
			this.loadData()
		},
		methods: {
			
			// 单位名称的数据
			async loadData() {
                
                const pames = {}
                
    await queryUnitName(pames).then(res => {
						if (res.code == 200) {
							this.dataSource= res.result
						}
					})
					.catch(err => {
						// 失败执行
					})
					.finally(() => {
						// 执行代码正确、报错都执行	
						
					});

			},
			
			

		}
	};
</script>

<style lang="scss" scoped>
	
</style>
相关推荐
荣--7 小时前
重构的艺术:在代码演进中寻找优雅
javascript·微信小程序·重构·nodejs
玛卡巴咖8 小时前
基于coze+微信小程序的ai对话
人工智能·微信小程序·notepad++
V+zmm1013411 小时前
校园快递平台系统(小程序论文源码调试讲解)
java·数据库·微信小程序·小程序·毕业设计
guanpinkeji12 小时前
旧衣回收小程序开发,市场双赢下的新选择
大数据·小程序·软件开发·小程序开发·回收小程序·旧衣回收小程序
98年撸铁的老阿姨13 小时前
公寓管理租房小程序毕业系统设计
小程序
98年撸铁的老阿姨13 小时前
新生校园报道小程序毕业系统设计
小程序
说私域13 小时前
基于定制开发开源AI大模型S2B2C商城小程序的商品选品策略研究
人工智能·小程序·开源
葱头的故事13 小时前
小程序中头像昵称填写
小程序
南阳迈特网络科技13 小时前
国内短剧系统源码部署小程序体验测评讲解
小程序·系统架构·php
1024小神13 小时前
uni小程序wx.switchTab有时候跳转错误tab问题,解决办法
小程序