小程序之request 封装

微信小程序使用 wx.request(Object object)发起 HTTPS 网络请求,所以在封装之前我们需要了解request的参数,见下图


data参数说明

1、创建一个js文件,建立_get方法,传几个参数;

function _get(url, data, successf, fail, complete){
 // successf 成功回调函数
// fail 失败回调
//complete 结束回调,不论成功还是失败都会进这里
}

一般我们使用post,get请求,所以这里封装了三种,post根据header的设置封装了两种,

data 参数说明
最终发送给服务器的数据是 String 类型,如果传入的 data 不是 String 类型,会被转换成 String 。转换规则如下:
对于 GET 方法的数据,会将数据转换成 query string(encodeURIComponent(k)=encodeURIComponent(v)&encodeURIComponent(k)=encodeURIComponent(v)...)
对于 POST 方法且 header['content-type'] 为 application/json 的数据,会对数据进行 JSON 序列化
对于 POST 方法且 header['content-type'] 为 application/x-www-form-urlencoded 的数据,会将数据转换成 query string (encodeURIComponent(k)=encodeURIComponent(v)&encodeURIComponent(k)=encodeURIComponent(v)...)

2、一般来说,请求都需要带上用户的信息,这里以token为例,保存在app.globalData.userInfo里,给传过来的data新增属性值,统一处理。

function _get(url, data, successf, fail, complete, type){
 data.token = app.globalData.userInfo ? app.globalData.userInfo.token:'';
}

3、值得注意的是,这个请求成功回调,只要你的wx.request成功发出了请求,无论返回什么http状态码,都会走success;
反之出现问题,比如说断网,域名解析有问题,或者尤其是我们去调用restful api时,可能会在url格式,参数类型上出些问题,这些情况下才会调用到fail。
所以success时要判断statusCode==200才是我们理解的成功,如果返回的对象里也有状态码的话,也可以在判断一层

 success(res) {
      if (res.statusCode == '200') {
        if(res.data.status == 0){
          successf(res);
        }else{
          //做一些错误的处理
          wx.showToast({
            title: res.data.msg,
            icon: 'none',
            duration: 1500
          });
        }
      } else {
        wx.showToast({
          title: res.statusCode,
          icon: 'none',
          duration: 1500
        });
      };
    },
success说明

另外在请求的时候我们也不会整个url全部写出来,会封装一个文件,调用名称就行,如下:

const host = 'https://***';
module.exports = {  
  login: host + '/your/address',
  phoneBind: host + '/wx/****',
};
在js中使用:
const config= require('../../utils/config.js');
let login = config.login

完整代码可以看GitHub,点这里

你可能感兴趣的:(小程序之request 封装)