关于封装小程序请求的参考建议 - 简书

/**
   * 
   * @Description: 重写微信官方请求
   * @Title: deerRequest
   * @author: Zing
   * @version: 1.0
   * @param: @param e wx.request同等参数
   * @param: @param isDefault judgeDeerCode是否按照默认协议进行 默认为true
   * @param: @param showToast 是否进行弹框 默认为true
   * @return: Promise 请求后的返回结果 (isDefault = true为协议返回结果,false为http返回结果格式)
   * @throws
   */
  deerRequest: function(e, showToast = true, isDefault = true) {
    let _this = this;
    //正式环境
    let domain = '';
    //测试环境
    //let domain = '';

    return new Promise((resolve, reject) => {
      wx.request({
        url: domain + e.url,
        data: e.data,
        header: e.header,
        timeout: e.timeout,
        method: e.method,
        dataType: e.dataType,
        responseType: e.responseType,
        success(res) {
          if (_this.judgeDeerCode(res, showToast, isDefault)) {
            resolve(res.data);
          } else {
            resolve(res);
          }
        },
        fail(res) {
          _this.isDeBugModel({
            deBug: _this.globalData.deBug,
            msg: '',
            deBugMsg: '请求失败,请稍后重试',
            code: res.data.code,
            showToast: true
          })
          resolve(res);
        },
        complete(res) {
          if (_this.globalData.deBug) {
            console.log(res)
          }
        }
      })
    })
  },
  /**
   * 
   * @Description: 内部协议判断
   * @Title: judgeDeerCode
   * @author: Zing
   * @version: 1.0
   * @param: @param res 请求后返回参数
   * @param: @param isDefault judgeDeerCode是否按照默认协议进行 默认为true
   * @param: @param showToast 是否进行弹框 默认为true
   * @return: Promise 请求后的返回结果 (isDefault = true为协议返回结果,false为http返回结果格式)
   * @throws
   */
  judgeDeerCode: function(res, showToast = true, isDefault = true) {
    if (res.data.code == '200') {
      //请求成功200(预期最终结果)
      return true;
    } else if (res.data.code == '400') {
      //请求异常400
      this.isDeBugModel({
        deBug: this.globalData.deBug,
        msg: '',
        deBugMsg: '请求异常',
        code: res.data.code,
        showToast: showToast
      })
      return !isDefault;
    } else if (res.data.code == '401') {
      //参数为空401
      this.isDeBugModel({
        deBug: this.globalData.deBug,
        msg: '',
        deBugMsg: res.data.message,
        code: res.data.code,
        showToast: showToast
      })
      return !isDefault;
    } else if (res.data.code == '402') {
      //对象已存在402
      this.isDeBugModel({
        deBug: this.globalData.deBug,
        msg: res.data.message,
        deBugMsg: '对象已存在',
        code: res.data.code,
        showToast: showToast
      })
      return !isDefault;
    } else if (res.data.code == '403') {
      //电话号码已存在403
      this.isDeBugModel({
        deBug: this.globalData.deBug,
        msg: '号码已存在',
        deBugMsg: '电话号码已存在',
        code: res.data.code,
        showToast: showToast
      })
      return !isDefault;
    } else if (res.data.code == '404') {
      //对象不存在(查询对象时用)404
      this.isDeBugModel({
        deBug: this.globalData.deBug,
        msg: '好像啥也没有~',
        deBugMsg: '对象不存在(查询对象时用)',
        code: res.data.code,
        showToast: showToast
      })
      return !isDefault;
    } else if (res.data.code == '405') {
      //短信、邮件、消息发送失败405
      this.isDeBugModel({
        deBug: this.globalData.deBug,
        msg: '发送失败',
        deBugMsg: '短信、邮件、消息发送失败',
        code: res.data.code,
        showToast: showToast
      })
      return !isDefault;
    } else if (res.data.code == '406') {
      //预期相反最终结果406
      this.isDeBugModel({
        deBug: this.globalData.deBug,
        msg: '请求失败',
        deBugMsg: '预期相反最终结果',
        code: res.data.code,
        showToast: showToast
      })
      return !isDefault;
    } else if (res.data.code == '407') {
      //验证、认证失败407
      this.isDeBugModel({
        deBug: this.globalData.deBug,
        msg: '请求失败',
        deBugMsg: '验证、认证失败',
        code: res.data.code,
        showToast: showToast
      })
      return !isDefault;
    } else if (res.data.code == '408') {
      //参数错误408
      this.isDeBugModel({
        deBug: this.globalData.deBug,
        msg: '请求失败',
        deBugMsg: '参数错误',
        code: res.data.code,
        showToast: showToast
      })
      return !isDefault;
    } else if (res.data.code == '411') {
      //数据为空||结果为空||对象为空 (查询结果数据时用)411
      this.isDeBugModel({
        deBug: this.globalData.deBug,
        msg: '好像啥也没有~',
        deBugMsg: '数据为空||结果为空||对象为空 (查询结果数据时用)',
        code: res.data.code,
        showToast: showToast
      })
      return !isDefault;
    } else if (res.data.code == '408') {
      //token过期或者无效421
      this.isDeBugModel({
        deBug: this.globalData.deBug,
        msg: '登录失效',
        deBugMsg: 'token过期或者无效',
        code: res.data.code,
        showToast: showToast
      })
      return !isDefault;
    } else if (res.data.code == '422') {
      //项目id为空422
      this.isDeBugModel({
        deBug: this.globalData.deBug,
        msg: '非法请求',
        deBugMsg: '项目id为空',
        code: res.data.code,
        showToast: showToast
      })
      return !isDefault;
    } else {
      //最终 系统错误500
      this.isDeBugModel({
        deBug: this.globalData.deBug,
        msg: '系统异常',
        deBugMsg: '系统错误',
        code: res.data.code,
        showToast: showToast
      })
      return !isDefault;
    }
  },
  /**
   * 
   * @Description: 内部协议判断
   * @Title: judgeDeerCode
   * @author: Zing
   * @version: 1.0
   * @param: @param e 请求对象,参照judgeDeerCode传入对象
   * @return: 暂无返回结果
   * @throws
   */
  isDeBugModel(e) {
    // 判断是否显示提示框默认显示
    if (e.showToast) {
      //判断是否为debug模式
      if (e.deBug) {
        // debug模式
        wx.showToast({
          title: e.deBugMsg + 'code:' + e.code,
          icon: 'none'
        })
      } else {
        wx.showToast({
          title: e.msg,
          icon: 'none'
        })
      }
    }
  }

推荐阅读更多精彩内容