微信小程序封装Request请求,支持自动携带token

5,028 阅读1分钟

实现一个网络请求(可实现携带 token 和不携带 token 访问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(调用页面)

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) => {})
  }
})