微信小程序wx.request封装与刷新token

 跪求大佬们能对我这垃圾方法提一些意见或者给优化优化,我想把请求的部分提出来,关键是不知道怎么下手啊。

function ajax(method, url, data) {
  let that = this;
  let app = getApp();
  let apiUrl = app.globalData.url;
  let time = wx.getStorageSync("expiredAt"); //过期时间
  let newTime = Date.parse(new Date());// 当前时间
  let userId = wx.getStorageSync("userId");
  let token = wx.getStorageSync("token");
  return new Promise((resolove, reject) => {
    if (!token) { // token不存在去重新登录
      wx.redirectTo({
        url: '/pages/login/index',
      })
    } else {
      if (newTime - time > 0) { // token 过期了 刷新token
        console.log("token过期")
        wx.request({
          url: apiUrl + '/api/transfer/token/' + userId,
          header: {
            Authorization: token
          },
          method: "GET",
          dataType: "json",
          success(res) {
            if (res.data.success_code == 200) {
              wx.setStorageSync("expiredAt", Date.parse(new Date(res.data.data.expired)))
              wx.setStorageSync("token", res.data.data.token)
              wx.setStorageSync("userId", res.data.data.userId)
              // 继续之前的请求
              wx.request({
                url: apiUrl + url,
                header: {
                  Authorization: token
                },
                method,
                data,
                dataType: 'json',
                success(res) {
                  if (res.data.success_code == 200) {
                    resolove(res.data)
                  }else {
                    reject(res)
                  }
                },
                fail(res) {
                  wx.showToast({
                    title: '请求发送失败',
                    icon: "none"
                  })
                }
              })
            }else {
              wx.showToast({
                title: 'token失效,重新登录',
                icon: "none"
              })
              setTimeout(() => {
                wx.redirectTo({
                  url: '/paegs/login/index',
                })
              }, 1000)
            }
          }
        })
      }else { // token没过期 
        wx.request({
          url: apiUrl + url,
          header: {
            Authorization: token
          },
          method,
          data,
          dataType: 'json',
          success(res) {
            if (res.data.success_code == 200) {
              resolove(res.data)
            }else {
              reject(res)
            }
          },
          fail(res) {
            wx.showToast({
              title: '请求发送失败',
              icon: "none"
            })
          }
        })
      }
    }
  })
}
// 向外暴露
module.exports = {
    ajax
};

 let app = getApp();

 let apiUrl = app.globalData.url;

开头的两句代码, 是因为领导要求能够切换测试环境与正式环境用的,如果不需要可以写死在文件的开头

上一段在页面中使用的代码

//引入方法
const {ajax} = require('../../utils/request.js');

//方法的使用
// 获取商品信息
    ajax('GET', '/api/transfer/getProductSelById', {
      productId,
      size
    }).then(res => {
      this.setData({
        shopData: res.data
      })
    }).catch(err => {
      console.log(err)
    });

写的不好  大佬们給一下意见啊啊啊啊啊啊

你可能感兴趣的:(微信小程序)