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>

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-24 07:26:05       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-24 07:26:05       100 阅读
  3. 在Django里面运行非项目文件

    2024-01-24 07:26:05       82 阅读
  4. Python语言-面向对象

    2024-01-24 07:26:05       91 阅读

热门阅读

  1. C#的WPF使用OFFICE库播放PPT

    2024-01-24 07:26:05       46 阅读
  2. 安全 专题

    2024-01-24 07:26:05       60 阅读
  3. PPTP和L2TP有什么区别

    2024-01-24 07:26:05       43 阅读
  4. python连接sql server查询数据输出excel

    2024-01-24 07:26:05       42 阅读
  5. 《设计模式的艺术》笔记 - 中介者模式

    2024-01-24 07:26:05       40 阅读
  6. C++引用

    C++引用

    2024-01-24 07:26:05      50 阅读
  7. stm32产品架构

    2024-01-24 07:26:05       60 阅读
  8. 设计高并发分布式锁架构的实用指南

    2024-01-24 07:26:05       64 阅读
  9. Angular: resolve 守卫

    2024-01-24 07:26:05       61 阅读
  10. Python 入门小编程

    2024-01-24 07:26:05       67 阅读
  11. Ubuntu 安装oracle jdk8

    2024-01-24 07:26:05       61 阅读