封装微信小程序http拦截器

作者: MsgSS | 来源:发表于2018-09-06 07:52 被阅读5次
微信小程序

微信小程序是数据驱动的应用,开发技术和vue、react和angular等mv*技术类似。在vue下可以用vue-resource、axios等模块进行http请求,但是在微信小程序上,http请求只支持wx.request(OBJECT),所以我们需要对wx.request进行封装,实现http拦截器的功能。

第一步:创建一个request.js文件

第二步:确定http、upload和websocket前缀

require.js  填写请求前缀

第三步:封装wx.request

request.js  function fun

        在请求发出前处理http地址、请求头和参数、在响应后解析返回值并做基本的逻辑判断,重点是使用Promise对象。

第四步:导出模块

request.js  导出模块

第五步:使用request

const Request = require("/utils/request");//导入模块

Request.post("/api/xcxWxLogin", {  //调用方法

              code: res.code,

              encryptedData: resp.encryptedData,

              iv: resp.iv,

              shareId: share.shareId || "",

              salesmanId: share.salesmanId || "",

              source: share.source || ""

}).then(res => { //成功回调

        //todo

}).catch(err => {}); //异常回调

第六步:拦截器完整代码

const apiHttp = "https://*****.com";

const socketHttp = "wss://*****.com/wss";

function fun(url, method, data, header) {

  data = data || {};

  header = header || {};

  let sessionId = wx.getStorageSync("UserSessionId");

  if (sessionId) {

    if (!header || !header["SESSIONID"]) {

      header["SESSIONID"] = sessionId;

    }

  }

  wx.showNavigationBarLoading();

  let promise = new Promise(function(resolve, reject) {

    wx.request({

      url: apiHttp + url,

      header: header,

      data: data,

      method: method,

      success: function(res) {

        if (typeof res.data === "object") {

          if (res.data.status) {

            if (res.data.status === -200) {

              wx.showToast({

                title: "为确保能向您提供最准确的服务,请退出应用重新授权",

                icon: "none"

              });

              reject("请重新登录");

            } else if (res.data.status === -201) {

              wx.showToast({

                title: res.data.msg,

                icon: "none"

              });

              setTimeout(function() {

                wx.navigateTo({

                  url: "/pages/user/supplement/supplement"

                });

              }, 1000);

              reject(res.data.msg);

            }

          }

        }

        resolve(res);

      },

      fail: reject,

      complete: function() {

        wx.hideNavigationBarLoading();

      }

    });

  });

  return promise;

}

function upload(url, name, filePath) {

  let header = {};

  let sessionId = wx.getStorageSync("UserSessionId"); //从缓存中拿该信息

  if (sessionId) {

    if (!header || !header["SESSIONID"]) {

      header["SESSIONID"] = sessionId; //添加到请求头中

    }

  }

  wx.showNavigationBarLoading();

  let promise = new Promise(function(resolve, reject) {

    wx.uploadFile({

      url: apiHttp + url,

      filePath: filePath,

      name: name,

      header: header,

      success: function(res) {

        resolve(res);

      },

      fail: reject,

      complete: function() {

        wx.hideNavigationBarLoading();

      }

    });

  });

  return promise;

}

module.exports = {

  apiHttp: apiHttp,

  socketHttp: socketHttp,

  "get": function(url, data, header) {

    return fun(url, "GET", data, header);

  },

  "post": function(url, data, header) {

    return fun(url, "POST", data, header);

  },

  upload: function(url, name, filePath) {

    return upload(url, name, filePath);

  }

};

相关文章

  • 封装微信小程序http拦截器

    微信小程序是数据驱动的应用,开发技术和vue、react和angular等mv*技术类似。在vue下可以用vue-...

  • 封装微信小程序http拦截器

    微信小程序是数据驱动的应用,开发技术和vue、react和angular等mv*技术类似。在vue下可以用vue-...

  • [微信小程序]封装HTTP

    好记性不如烂笔头 网络请求是小程序中必不可少的一部分,而且使用频率也很高,虽然小程序提供的网络请求组件已经封装的很...

  • 2019-07-15微信小程序封装http请求---(promi

    微信小程序封装http请求---(promise) 在顶级app.js中添加全局url地址 封装方法 /** *...

  • wx.request()的三层调用封装

    记录封装微信小程序的Http请求home.js调用theme,hs , theme调用http,jshome.js...

  • 微信小程序 - http请求封装

    以上为小程序的基本http请求代码,实际代码中如果每次这样来写是比较繁琐的,那我们就来做一下封装。 那代码中我们比...

  • 微信小程序HTTP封装请求

    http.js utils 若本号内容有做得不到位的地方(比如:涉及版权或其他问题),请及时联系我们进行整改即可,...

  • 微信小程序http请求封装

    微信小程序中request请求都是异步请求的,封装的http请求 使用promise请求将异步请求变成同步化,保存...

  • 微信小程序网络封装(简单高效)

    推荐一篇微信小程序网络封装的文章,这篇文章主要介绍了微信小程序网络封装(简单高效),微信小程序的网络请求很便捷,直...

  • 小程序tab组件封装

    微信小程序tab组件封装 最近在做微信小程序的项目,下面就微信小程序中tab的tab功能封装成一个组件,在项目项需...

网友评论

    本文标题:封装微信小程序http拦截器

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