微信小程序封裝Request請求,支持自動攜帶token

實現一個網絡請求(可實現攜帶 token 和不攜帶 token 訪問api)api

request.js緩存

###封裝請求是否自動帶上token

const API_BASE_URL = 'https://***.com';

const REQUEST = (url, method, data = {}) => {
  return new Promise((resolve, reject) => {
    wx.request({
      url: API_BASE_URL + url,
      method: method,
      data: data,
      header: {
        'Content-Type': 'application/x-www-form-urlencoded'
      },
      success(res) {
        resolve(res.data)
      },
      fail(error) {
        reject(error)
      }
    })
  })
}

const HTTP = (url, method, data, isToken = true) => {###isToken請求是否自動帶上token值,默認爲true
  return new Promise((resolve, reject) => {
    if (isToken) { ###請求帶token
      let token = wx.getStorageSync('token')
      if (token) { ###緩存有token直接用
        data = Object.assign({
          openId: token
        }, data)
        REQUEST(url, method, data).then(res => {
          resolve(res)
        })
      } else { ###緩存沒有token,用code換取
        wx.login({
          success: res => {
            if (res.code) {
              getUserAuthor({
                code: res.code
              }).then(res => {
                wx.setStorageSync('token', res.data.openid)
                data = Object.assign({
                  openId: res.data.openid
                }, data)
                REQUEST(url, method, data).then(res => {
                  resolve(res)
                })
              })
            }
          }
        })
      }
    } else { ###請求不帶token
      REQUEST(url, method, data).then(res => {
        resolve(res)
      })
    }
  })
}

let getUserAuthor = (code) => {
  return REQUEST('/auth/getUserAuthor', 'get', code)
}

let getGoldCount = (data) => {
  return HTTP('/mini/user/getGoldCount', 'get', data, true)
}

let getGoods = (data) => {
  return HTTP('/goods/getGoods', 'get', data, false)
}

export default {
  getGoldCount: getGoldCount,
  getGoods: getGoods
}

複製代碼

index.js(調用頁面)bash

import HTTP from '../../utils/request';
Page({
  data: {

  },
  
  onLoad: function (options) {
    const goodsId = '040e5a34-43c2-4f19-b1a0-a5d157f15062';
    this.getGoldCount();
    this.getGoods({ goodsId: goodsId});
  },
  
  getGoldCount() {
    HTTP.getGoldCount().then((res) => {})
  },
  
  getGoods(data){
    HTTP.getGoods(data).then((res) => {})
  }
})

複製代碼
相關文章
相關標籤/搜索