封装微信小程序http拦截器过程解析


Posted in Javascript onAugust 13, 2019

前言

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

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

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

封装微信小程序http拦截器过程解析

第三步:封装wx.request

封装微信小程序http拦截器过程解析

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

第四步:导出模块

封装微信小程序http拦截器过程解析

第五步:使用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);
}
};

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
js限制文本框为整数和货币的函数代码
Oct 13 Javascript
jQuery中绑定事件的命名空间详解
Apr 05 Javascript
基于jquery实现的鼠标拖拽元素复制并写入效果
Aug 23 Javascript
JQuery中使用ajax传输超大数据的解决方法
Jul 14 Javascript
JavaScript实现定时隐藏与显示图片的方法
Aug 06 Javascript
JavaScript构造函数详解
Dec 27 Javascript
JavaScript实现窗口抖动效果
Oct 19 Javascript
Vue.js仿Metronic高级表格(一)静态设计
Apr 17 Javascript
vue动态生成dom并且自动绑定事件
Apr 19 Javascript
jquery.validate表单验证插件使用详解
Jun 21 jQuery
史上最全JavaScript数组去重的十种方法(推荐)
Aug 17 Javascript
JavaScript类数组对象转换为数组对象的方法实例分析
Jul 24 Javascript
Vue中通过Vue.extend动态创建实例的方法
Aug 13 #Javascript
微信小程序封装分享与分销功能过程解析
Aug 13 #Javascript
node删除、复制文件或文件夹示例代码
Aug 13 #Javascript
vue实现下拉加载其实没那么复杂
Aug 13 #Javascript
vue中created和mounted的区别浅析
Aug 13 #Javascript
微信小程序实现点击空白隐藏的方法示例
Aug 13 #Javascript
微信小程序使用npm包的方法步骤
Aug 13 #Javascript
You might like
php中使用$_REQUEST需要注意的一个问题
2013/05/02 PHP
PHP简单实现无限级分类的方法
2016/05/13 PHP
php基于自定义函数记录log日志方法
2017/07/21 PHP
php-msf源码详解
2017/12/25 PHP
laravel框架查询数据集转为数组的两种方法
2019/10/10 PHP
javascript break指定标签打破多层循环示例
2014/01/20 Javascript
js动态控制table的tr、td增加及删除的具体实现
2014/04/30 Javascript
基于jquery和svg实现超炫酷的动画特效
2014/12/09 Javascript
javascript中的遍历for in 以及with的用法
2014/12/22 Javascript
javascript事件冒泡实例分析
2015/05/13 Javascript
js实现仿网易点击弹出提示同时背景变暗效果
2015/08/13 Javascript
Jquery时间轴特效(三种不同类型)
2015/11/02 Javascript
jquery 动态增加,减少input表单的简单方法(必看)
2016/10/12 Javascript
详解React native fetch遇到的坑
2018/08/30 Javascript
详解关于Vue2.0路由开启keep-alive时需要注意的地方
2018/09/18 Javascript
微信小程序生成海报分享朋友圈的实现方法
2019/05/06 Javascript
Pandas中把dataframe转成array的方法
2018/04/13 Python
python3+dlib实现人脸识别和情绪分析
2018/04/21 Python
如何在python字符串中输入纯粹的{}
2018/08/22 Python
解决python3 HTMLTestRunner测试报告中文乱码的问题
2018/12/17 Python
python实现PID算法及测试的例子
2019/08/08 Python
用python写测试数据文件过程解析
2019/09/25 Python
python 递归调用返回None的问题及解决方法
2020/03/16 Python
Python logging模块异步线程写日志实现过程解析
2020/06/30 Python
python实现杨辉三角的几种方法代码实例
2021/03/02 Python
3D动画《斗罗大陆》上线当日播放过亿
2021/03/16 国漫
英国最大的在线快递公司之一:ParcelHero
2019/11/04 全球购物
介绍一下Java的事务处理
2012/12/07 面试题
Laravel的加密解密与哈希实例讲解
2021/03/24 PHP
通用求职信范文模板分享
2013/12/27 职场文书
高三毕业典礼演讲稿
2014/05/13 职场文书
法人代表授权委托书范文
2014/09/10 职场文书
党校学习党性分析材料
2014/12/19 职场文书
推销搭讪开场白
2015/05/28 职场文书
余世维讲座观后感
2015/06/11 职场文书
重阳节座谈会主持词
2015/07/03 职场文书