收藏
回答

wx.request如何拦截?当多个需要登录的接口请求,有一个返回未登录如何拦截其他的?

一个页面有多个接口(需要token),请求的时候,多个接口返回未登录,然后出现了多次未登录的操作,如:未登录提示和连续打开多个login页面

module.exports.request = function(data) {
  return new Promise((resolve, reject) => {
    wx.request({
      method: 'POST',
      url: app.globalData.baseUrl,
      data: data,
      success(res) {
       // res.statusCode === 200 ? resolve(res.data) :
        // 可以在这里判断接口是否有效,吗?有效执行无效跳转登录页面
        if (res.statusCode === 200){
          if (res.data.code === '0'){
            resolve(res.data.data)
          } else if(res.data.code ==='-101') { // 未登录
            wx.showToast({
              title: res.data.msg,
              icon: 'none',
              duration: 1500
            })
            let openId = app.globalData.openid || wx.getStorageSync('openid');
            let accessToken = app.globalData.accessToken || wx.getStorageSync('accessToken');
            if (accessToken){
              wx.removeStorageSync('accessToken');
              app.globalData.accessToken = null;
              wx.navigateTo({
                url: "/pages/bindPhone/bindPhone"
              });
            } else {
              if (openId) {// 授权的时候
                wx.navigateTo({
                  url: "/pages/bindPhone/bindPhone?openid=" + openId
                });
              } else { // 未授权
                wx.removeStorageSync('accessToken');
                app.globalData.accessToken = null;
                setTimeout(function () {
                  wx.navigateTo({
                    url: '/pages/login/login'
                  })
                }, 1500)
              }
            }
           return reject(res.data);
          } else if (res.data.code !== '0'){
            wx.showToast({
              title: res.data.msg,
              icon: 'none',
              duration: 1500
            })
            reject(res.data);
          }
        } else {
          reject(res.data);
        }
      },
      fail(res) {
        reject(res)
      }
    })
  }).catch(e => {
    console.log(e)
  })
}


回答关注问题邀请回答
收藏

2 个回答

  • o0o有脾气的酸奶
    o0o有脾气的酸奶
    2019-12-17

    1、判断当前页面路径是否是/pages/login/login 或 /pages/bindPhone/bindPhone

    else if(res.data.code ==='-101') {// 未登录

        var r = getCurrentPages().pop().route || '', ps = {'pages/login/login':0, 'pages/bindPhone/bindPhone':0}

        if(r in ps) return

        ....

    }

    2、或者加个缓存变量,登录后清除wx.removeStorageSync('isAuthing')

    else if(res.data.code ==='-101') {// 未登录

        var r = wx.getStorageSync('isAuthing')

        if(r) return

        wx.setStorageSync('isAuthing', true)

        ....

    }


    2019-12-17
    有用 2
    回复 1
    • 吃饱了睡
      吃饱了睡
      2019-12-17
      谢谢大佬
      2019-12-17
      回复
  • 土家肸哥
    土家肸哥
    2019-12-17

    总有个先后吧,同步方式,第一个接口返回不需要登录后再请求其他接口

    2019-12-17
    有用
    回复 4
    • 。。。。。。
      。。。。。。
      2019-12-17
      有没有处理并发执行的方法
      2019-12-17
      回复
    • 土家肸哥
      土家肸哥
      2019-12-17回复。。。。。。
      有啊,暂存一个标识呗,有标识就不跳转登录呗
      2019-12-17
      回复
    • 吃饱了睡
      吃饱了睡
      2019-12-17回复土家肸哥
      我也想到存一个标识,不知道咋存,可以帮我改下吗?
      2019-12-17
      回复
    • 土家肸哥
      土家肸哥
      2019-12-17回复吃饱了睡
      难道token的保存不是你写的???
      2019-12-17
      回复
登录 后发表内容
问题标签