码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 小程序无感刷新


    下载wechat-http依赖

    npm install wechat-http
    
    • 1

    封装请求拦截器和相应拦截器,借助refreshToken实现无感刷新

    // 导入 http 模块
    import http from 'wechat-http'
    // 基础路径,同时需添加合法请求域名
    http.baseURL = 'https://live-api.itheima.net'
    // 配置请求拦截器
    http.intercept.request = function (options) {
      // 扩展头信息
      const defaultHeader = {}
      // 身份认证
      defaultHeader.Authorization = 'Bearer ' + getApp().token
      // 与默认头信息合并
      options.header = Object.assign({}, defaultHeader, options.header)
      // 处理后的请求参数
      return options
    }
    // 响应拦截器,返回核心数据 data
    http.intercept.response = async ({
      data,
      config
    }) => {
      // 如果状态码为401,则表明token已失效
      if (data.code === 401) {
        // 获取应用实例
        const app = getApp()
        // 1.3 状态为 401 且接口为 /refreshToken 表明 refreshToken 也过期了
        if (config.url.includes('/refreshToken')) {
          // 获取当前页面的路径,保证登录成功后能跳回到原来页面
          const pageStack = getCurrentPages()
          const currentPage = pageStack.pop()
          const redirectURL = currentPage.route
          // 跳由跳转(登录页面)
          return wx.redirectTo({
            url: '/pages/login/index?redirectURL=/' + redirectURL,
          })
        }
        // 1.1 调用接口获取新的token
        const res = await http({
          url: '/refreshToken',
          method: 'POST',
          header: {
            Authorization: 'Bearer ' + app.refreshToken,
          },
        })
        // 检测接口是否调用成功
        if (res.code !== 10000) return wx.utils.toast('更新token失败了!')
        // 重新存储新的 token
        app.setToken('token', res.data.token)
        app.setToken('refreshToken', res.data.refreshToken)
    
        // 1.2 获取到原来接口请求的参数
        config = Object.assign(config, {
          header: {
            // 更新后的 token
            Authorization: 'Bearer ' + res.data.token,
          },
        })
        // 重新发请求
        return http(config)
      }
      // 只保留data数据,其它的都过滤掉
      return data
    }
    
    // 普通的模块导出
    export default http
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
  • 相关阅读:
    【2023研电赛】安谋科技企业命题特别奖:面向独居老人的智能居家监护系统
    设计模式学习记录
    2023.10.7 Java 创建线程的七种方法
    对个人来说,最好的记账方法是什么?
    L47.linux命令每日一练 -- 第七章 Linux用户管理及用户信息查询命令 -- users和whoami
    普通二叉树
    大数据-74 Kafka 高级特性 稳定性 - 控制器、可靠性 副本复制、失效副本、副本滞后 多图一篇详解
    【MATLAB源码-第81期】基于matlab的polar码三种译码算法比较(SC,SCL,BP)。
    设计模式 -- 命令模式(Command Pattern)
    计算机英文论文写作需要注意哪些细节? - 易智编译EaseEditing
  • 原文地址:https://blog.csdn.net/weixin_45917727/article/details/133894343
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号