微信小程序封装request请求,最完整版

promise封装微信小程序请求方式

(以下代码直接拿来就可以用)

const HTTPS_HOST = "http://192.168.0.29:8080" // w
// const HTTPS_HOST = "http://192.168.0.10:8080" // l

function dealResult(res, resolve, reject) {
  let code = res.code || res.data.code;
  if (res.errMsg == 'openDocument:ok') {
    resolve(res);
  } else if (code === 200) {
    resolve(res.data);
  } else if (code === 401) {
    wx.showToast({
      title: '登入已过期',
      icon: 'error',
      duration: 2000
    });
    wx.reLaunch({
      url: '/pages/login/login'
    })
  } else if (code === 500) {
    wx.showToast({
      title: res.data.msg || "",
      icon: 'none',
      duration: 2000
    })
    resolve(res.data);
  }
}

function request(options, type) {
  let params = options.data || {};
  return new Promise((resolve, reject) => {
    var token;
    wx.getStorage({
      key: 'token',
      success(res) {
        token = res.data;
        getHttp(token, params, options, type, resolve, reject)
      },
      fail(res) {
        if (options.url != "/auth/login" && options.url != "/code") {
          return;
        } else {
          getHttp(token, params, options, type, resolve, reject)
        }
      }
    })
  })
}

function getHttp(token, params, options, type, resolve, reject) {
  // 通用接口拦截
  if (typeof type == 'undefined') {
    wx.request({
      header: {
        'content-type': 'application/json',
        'appSign': 'wxapp',
        "Authorization": "Bearer " + token
      },
      ...options,
      data: params,
      url: HTTPS_HOST + options.url,
      success(res) {
        dealResult(res, resolve, reject);
      },
      fail(err) {
        wx.hideLoading()
        // 错误处理
        wx.showModal({
          title: '提示',
          showCancel: false,
          content: '请求超时,请检查网络!',
          success: function () {
          }
        })
        reject(err);
      }
    });
  } else if (typeof type != 'undefined' && type == 'downloadFile') {
    // 下载预览
    wx.downloadFile({
      ...options,
      url: HTTPS_HOST + options.url,
      header: {
        'appSign': 'wxapp',
        "Authorization": "Bearer " + token
      },
      success(res) {
        const filePath = res.tempFilePath;
        wx.openDocument({
          filePath: filePath,
          fileType: 'pdf',
          success: function (res) {
            console.log('打开文档成功');
            dealResult(res, resolve, reject);
          },
          fail(err) {
            console.log('打开文档失败:', err)
          }
        })
      },
      fail(err) {
        reject(err);
      }

    })
  } else if (typeof type != 'undefined' && type == 'uploadFile') {
    wx.uploadFile({
      ...options,
      url: HTTPS_HOST + options.url,
      header: {
        'appSign': 'wxapp',
        "Authorization": "Bearer " + token
      },
      success(res) {
        // const data = res.data;
        res = JSON.parse(res.data)
        dealResult(res, resolve, reject);
      },
      fail(err) {
        console.log('err:', err)
        reject(err);
      },
      complete(err) {
        // console.log('comp:', err)
        reject(err);
      }
    })
  }
}


export default request;



版权声明:本文为weixin_46659355原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。