封装微信小程序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 相关文章推荐
JavaScript之引用类型介绍
Aug 10 Javascript
解析JSON对象与字符串之间的相互转换
Dec 18 Javascript
jQuery - css() 方法示例详解
Jan 16 Javascript
jquery跨域请求示例分享(jquery发送ajax请求)
Mar 25 Javascript
采用自执行的匿名函数解决for循环使用闭包的问题
Sep 11 Javascript
jquery中post方法用法实例
Oct 21 Javascript
JS实现自动固定顶部的悬浮菜单栏效果
Sep 16 Javascript
浅谈node.js中async异步编程
Oct 22 Javascript
JavaScript浏览器对象模型BOM(BrowserObjectModel)实例详解
Nov 29 Javascript
微信小程序简单实现form表单获取输入数据功能示例
Nov 30 Javascript
小程序如何构建骨架屏
May 29 Javascript
jQuery带控制按钮轮播图插件
Jul 31 jQuery
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
DOMXML函数笔记
2006/10/09 PHP
PHP中的日期处理方法集锦
2007/01/02 PHP
使用Thinkphp框架开发移动端接口
2015/08/05 PHP
php代码架构的八点注意事项
2016/01/25 PHP
php 调用百度sms来发送短信的实现示例
2018/11/02 PHP
Thinkphp5框架实现图片、音频和视频文件的上传功能详解
2019/08/27 PHP
PHP终止脚本运行三种实现方法详解
2020/09/01 PHP
jquery 插件 任意位置浮动固定层
2008/12/25 Javascript
javascript document.execCommand() 常用解析
2009/12/14 Javascript
javascript 同时在IE和FireFox获取KeyCode的代码
2010/02/07 Javascript
JavaScript和ActionScript的交互实现代码
2010/08/01 Javascript
Jquery时间验证和转换工具小例子
2013/07/01 Javascript
FireBug 调试JS入门教程 如何调试JS
2013/12/23 Javascript
JQuery异步加载无限下拉框级联功能实现示例
2014/02/19 Javascript
javascript数组操作总结和属性、方法介绍
2014/04/05 Javascript
JavaScript判断按钮被点击的方法
2015/12/13 Javascript
利用JS判断字符串是否含有数字与特殊字符的方法小结
2016/11/25 Javascript
bootstrap table操作技巧分享
2017/02/15 Javascript
微信小程序滚动Tab实现左右可滑动切换
2017/08/17 Javascript
vue.js 添加 fastclick的支持方法
2018/08/28 Javascript
Vue.js 中的 v-cloak 指令及使用详解
2018/11/19 Javascript
详解VUE单页应用骨架屏方案
2019/01/17 Javascript
VuePress 快速踩坑小结
2019/02/14 Javascript
Angular8 实现table表格表头固定效果
2020/01/03 Javascript
JavaScript进制转换实现方法解析
2020/01/18 Javascript
Node.js文本文件BOM头的去除方法
2020/11/22 Javascript
使用Python的判断语句模拟三目运算
2015/04/24 Python
python 把数据 json格式输出的实例代码
2016/10/31 Python
django用户登录和注销的实现方法
2018/07/16 Python
Linux 修改Python命令的方法示例
2018/12/03 Python
python实现简单多人聊天室
2018/12/11 Python
美国市场上最实惠的送餐服务:Dinnerly
2018/03/18 全球购物
迟到检讨书900字
2014/01/14 职场文书
运动会100米解说词
2014/01/23 职场文书
党员创先争优活动总结
2014/05/04 职场文书
windows server2016安装oracle 11g的图文教程
2022/07/15 Servers