uniapp中request请求token失效后重新获取token且重新请求

        在APP日常使用过程中可能遇到token过期或者token失效的情况;平常大家的做法就是给个提示,然后需要再次请求一次接口重新获取token,这样的操作给用户一种极不友好的体验,为了让用户感觉不到重新获取token这个场景,那么就需要在用户不知情的情况下重新获取token且再次重新请求接口使操作流程不中断。

        本次给大家介绍在请求接口request内建立重试机制,该机制统一封装在一个request请求中。

import Url from "../config/urlConfig.js"
import getToken from "@/common/getToken.js" //封装获取token的方法


/**
 * header参数设置
 * @param {Object} header
 */
function headers(header) {
	let headers = {};
	let Token = uni.getStorageSync("token")
	if (Token.length!==0) { //有token的情况下设置token
		let token = {"token":Token};
		headers = Object.assign(token,header);
	}else {
		headers = header;
	}
	return headers;
}


/**
 * 请求封装
 * @param {Object} url
 * @param {Object} method
 * @param {Object} data
 * @param {Object} headers
 * @param {Object} resType
 */
 function request(url,method,data,header,resType) {
	 return new Promise((resolve,reject)=>{
		 uni.request({
		 	url: Url() + url,
		 	method: method || 'GET',
		 	data: data || {},
		 	header: header	|| {},
		 	responseType: resType,
		 	success: (res)=>{
		 		if(res.data.code===401) {  //请求接口返回401(token异常)后直接返回401
		 			resolve(401)
		 		}else {
		 			resolve(res); //没有401时返回响应数据
		 		}
		 	},
		 	fail: (err)=>{
		 		reject(err);
		 	}
		 })
	 })
 }

/**
 * export请求;请求重试机制
 * @param {Object} url
 * @param {Object} method
 * @param {Object} data
 * @param {Object} headers
 * @param {Object} resType
 */
export default (url,method,data,header,resType)=>{
	return new Promise((resolve,reject)=>{
		request(url,method,data,headers(header),resType).then(res=>{
			if(res===401) { 	//接口请求401,401是request请求手动抛出的401
				getToken().then(res=>{  	//接口重试,在获取到token以后对请求失败的接口再次请求;这儿可以根据自己的需要自己定义
					request(url,method,data,headers(header),resType).then(res=>{
						resolve(res)
					})
				})
			}else {		//没有token异常时直接返回响应数据
				resolve(res)
			}
		}).catch(err=>{reject(err)})
	})
}

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

二九筒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值