美文网首页
小程序wx.request封装/携带token

小程序wx.request封装/携带token

作者: w_小伍 | 来源:发表于2021-01-22 09:19 被阅读0次

    在根目录下新建request文件夹,放两个文件:dev.js:环境区分,request:wx.request封装

    dev.js

    const current = 'dev' //区分开发环境和生产环境,
    const profiles = {
      'dev': {
        'online': false,
        'baseURL': '开发环境' //开发环境地址
      },
      'prod': {
        'online': true,
        'baseURL': '正式环境'//生产环境地址
      }
    }
    const ENV = profiles[current]
    module.exports = ENV
    
    

    request.js

    import ENV from './dev'
    
    let ajaxTimes = 0 // 异步请求的个数
    
    export const request = (params, isToken) => {
      let header = {...params.header} // 避免覆盖传递过来的header
      // 全局设置token 传params的时候需要携带token的多传一个参数
      if (isToken) {
        const token = wx.getStorageSync('token')
        if (token) {
          header['Authorization'] = token
        }
      }
      ajaxTimes++
      wx.showLoading({
        title: '加载中',
        mask: true
      })
      return new Promise((resolve, reject) => {
        wx.request({
          ...params,
          header: header,
          url: params.customUrl || ENV.baseURL + params.url, // params.customUrl自定义的url,有些接口可能baseURL也不同
          success: result => {
            if (result.data.meta.status === 200) {
              resolve(result.data.message) // 直接返回结果,需要结构一样
            } else {
              reject(result.meta.msg)
            }
          },
          fail: err => {
            wx.showToast({
              title: '获取数据失败',
              icon: "none",
              duration: 2000
            })
            reject(err.data)
          },
          complete(res) {
            ajaxTimes--
            if (ajaxTimes === 0) {
              wx.hideLoading() // 当所有的请求都完成时再关闭loading
            }
          }
        })
      })
    }
    

    在根目录下新建api文件夹来管理接口


    image.png

    比如管理订单接口的order.js

    import {request} from '../request/index'
    
    // 获取所以订单
    export function getAllOrder(data) {
      return request({
        url: '/my/orders/',
        method: 'get',
        data // 这里get和post都是data,没有params
      },'isToken'/是否需要携带token/)
    }
    

    页面使用

    import {getAllOrder} from '../../api/order'
    async getOrderList(type) {
        try {
          const param = {
            type: type
          }
          const {orders} = await getAllOrder(param)
          this.setData({
            orderList: orders.map(v => ({...v, create_time_cn: (new Date(v.create_time * 1000).toLocaleString())}))
          })
        } catch (e) {
          console.log(e)
        }
      },
    

    相关文章

      网友评论

          本文标题:小程序wx.request封装/携带token

          本文链接:https://www.haomeiwen.com/subject/xkqszktx.html