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

提供信息门户网站制作/网盘资源搜索神器

提供信息门户网站制作,网盘资源搜索神器,沈阳 商城 网站 开发,十大素材网站小程序中实现token过期重新登录再重新请求业务接口 该方法用于小程序token两个小时后过期,重新获取token再请求接口 1、新建一个封装请求接口文件,命名为request.js(我在utils文件夹下建request.js),代码如下: let isRefreshing …

小程序中实现token过期重新登录再重新请求业务接口
该方法用于小程序token两个小时后过期,重新获取token再请求接口
1、新建一个封装请求接口文件,命名为request.js(我在utils文件夹下建request.js),代码如下:

let isRefreshing = true;
let subscribers = [];function onAccessTokenFetched() {subscribers.forEach((callback) => {callback();})subscribers = [];
}function addSubscriber(callback) {subscribers.push(callback)
}export class Http {constructor() {}request({url,data = {},method,header,callback = ''} = {}) {let baseUrl = "xxxxx" //后台请求接口的公共部分let _this = this;return new Promise((resolve, reject) => {uni.request({url: baseUrl + url,data,method,header: {"token": uni.getStorageSync('token'),"content-type": method == 'post' || method == 'POST' ?'application/x-www-form-urlencoded' : 'application/json; charset=utf-8'},callback,fail(res) {reject(res)},complete: res => {// callback token过期后重新请求接口,接口返回的数据if (callback) return callback(res.data);let statusCode = res.data.code;let errText = res.data.msg;// console.log(statusCode, 'statusCode')if (statusCode == 404) {console.log('接口不存在')} else if (statusCode == 401 || statusCode == 10002 ) {// 将需要重新执行的接口缓存到一个队列中addSubscriber(() => {_this.request({url,data,method,header,callback: resolve})})if (isRefreshing) {getNewToken(`${baseUrl}/token/getToken`, url, data).then(() => {// 依次去执行缓存的接口onAccessTokenFetched();isRefreshing = true;})}isRefreshing = false;} else if (statusCode == 200 || statusCode == 0 || statusCode == 1) {// 登录成功,抛出数据resolve(res.data)}else if (statusCode == 10004) {reject(res.data)}else if(statusCode == 30001 || statusCode == 30002){// 提示用户登录信息不全,需要获取用户信息uni.navigateTo({url:"/pages/login/login"})} else if (statusCode.startsWith('5')) {uni.showModal({content: '服务器报错,请重试!',showCancel: false});}}})})}
}// 获取token,token请求的接口通过形参传进来
const getNewToken = (url) => {return new Promise((resolve, reject) => {uni.login({success(res) {console.log(res)uni.request({url: url,method: 'POST',header: {"content-type": "application/x-www-form-urlencoded"},data: {code: res.code},success(res) {console.log(res, 'token')let r = res.data;console.log(r, 'r')// 将所有存储到观察者数组中的请求重新执行。if (r.code == 0) {const token = r.data;// 使用本地缓存,把token存起来uni.setStorageSync('token', token);resolve(res);}}})},fail(err) {reject()console.error('uni login fail', err);}});})
}

2、使用方法,与utils文件夹同级建一个新的文件夹api,在api文件夹下新建index.js文件,代码如下

import { Http } from '../utils/request.js';
export class Index extends Http {constructor() {super();} // 获取轮播图 data代表参数getBanner(data) {return this.request({url: '/getBanner',method: 'GET',data: data});}
}

 3、再在api文件夹下新建一个js(banner.js)文件,用于引入index.js写的接口,代码如下

import {Index
} from './index.js';
const API = new Index();// 轮播图
export function getBanner(location_type) {return new Promise(resolve => {API.getBanner({location_type: location_type}).then(res => {resolve(res.data)})})
}

 4、在页面中使用,代码如下:

import { getBanner } from '../../api/banner.js'
export default {data() {return {imgUrls: []};},onLoad(options) {// 请求轮播图接口getBanner(0).then(res => {this.imgUrls = res})},methods: { }
};

 

 

http://www.lbrq.cn/news/1566721.html

相关文章:

  • 关键词设定在网站上/关键词排名优化江苏的团队
  • 建设银行网站不能登录不了/营业推广经典案例
  • 网站推广公司 优帮云/最新疫情19个城市封城
  • 公司网站建设企划书/seo在线诊断工具
  • 护士做学分的网站/网站托管服务商
  • 网站建设备案是什么意思/成人电脑培训班附近有吗
  • 电子商务网站建设成都/重庆seo技术博客
  • 济南网站建设第六网建/济南做网站比较好的公司
  • 阳江市网站建设/今天热搜前十名
  • 做环评在发改委网站申请/慧生活798app下载
  • 网站建设为了什么/淘宝关键词排名查询网站
  • 商务部网站市场体系建设司子站/搜索网站哪个好
  • 平顶山公司做网站/百度竞价开户需要多少钱
  • 襄阳网站建设公司/买卖友链
  • 郴州红网/广告优化师的工作内容
  • 网站建设公司名/seo优化教程自学
  • brophp框架做网站/域名是什么
  • 如何自制一个网站/百度应用app
  • 个人主页免费网站/上海关键词优化排名软件
  • 做海报找图片的网站/网络营销的特点有几个
  • 惠州建网站服务/360提交网站收录入口
  • 吉林建设厅网站首页/百度一下首页设为主页
  • 专门做网站的公司/网络营销成功案例有哪些
  • 上海做网站cnsosu/百度首页 百度
  • wordpress内容新窗口打开/玉溪seo
  • 承德住房和城乡建设局网站关闭了/seo网站推广方案策划书
  • 互联网做网站排明/发新闻稿平台
  • iis7发布静态网站/东莞网络推广营销公司
  • discuz做的网站/品牌营销策划书
  • 县政府网站建设/重庆网站建设技术外包
  • C#WPF实战出真汁01--项目介绍
  • Redis (REmote DIctionary Server) 高性能数据库
  • 风电功率预测实战:从数据清洗到时空建模​​
  • 一致性哈希Consistent Hashing
  • 一种适用于 3D 低剂量和少视角心脏单光子发射计算机断层成像(SPECT)的可泛化扩散框架|文献速递-深度学习人工智能医疗图像
  • .NET 的 WebApi 项目必要可配置项都有哪些?