小程序中用TS封装一个http插件

import Taro from '@tarojs/taro'
import config from '../config/config'
import qs from 'qs'

const dev = process.env.NODE_ENV === 'development'

class Http {
  BASEURL:String
  private static instance: Http;

  public constructor () {
    this.BASEURL = config.baseUrl
  }

  public static getInstance(): Http {
    if (!this.instance) {
        this.instance = new Http();
    }
    return this.instance;
  }

  request(api: string, data?: object, showLoading:boolean = true, method: 'OPTIONS' | 'GET' | 'HEAD' | 'POST' | 'PUT' | 'DELETE' | 'TRACE' | 'CONNECT' = 'POST') {
    if(showLoading){
      Taro.showLoading({
        title: 'Loading...'
      })
    }
    if(false){
      console.log('=======请求参数==========================================')
      console.log(data)
      console.log(`接口地址:${this.BASEURL + api}`)
    }

    let cookie = Taro.getStorageSync('JSESSIONID')
    return new Promise((resolve, reject) => {
      Taro.request({
        url: `${this.BASEURL + api}`,
        method,
        data: qs.stringify(data),
        credentials: 'include',
        header: {
          'Cookie': 'bookkeeping-session='+ cookie,
          'content-type': 'application/x-www-form-urlencoded;charset=utf-8'
        }
      }).then((res:any) => {
        if (!dev) {
          if (res.data.message === '代理商未登录,请先登录') {
            window.location.href = '/h5/index.html#/pages/login'
          }
        }
        if (res.message === '未登录') {
          Taro.removeStorageSync('userinfo')
          Taro.switchTab({
            url: `/pages/index/index`
          })
        }
        if(false){
          console.log('=======返回数据======')
          console.log(res.data)
        }
       showLoading && Taro.hideLoading()
        resolve(res.data)
        if (!res.data.success) {
          Taro.showToast({
            title: res.data.message,
            icon: 'none',
            duration: 3000
          })
        }
      })
    })
  }

}
let http = Http.getInstance()
export default http;

使用方式
http.request(api.addBudgetPage)
  .then((res:any)=>{
    if(res.success){
       ...
    }
})        

你可能感兴趣的:(小程序中用TS封装一个http插件)