封装微信小程序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 相关文章推荐
jquery获取input表单值的代码
Apr 19 Javascript
一些主流JS框架中DOMReady事件的实现小结
Feb 12 Javascript
Extjs实现进度条的两种便捷方式
Sep 26 Javascript
jQuery拖拽 & 弹出层 介绍与示例
Dec 27 Javascript
JQuery教学之性能优化
May 14 Javascript
浅谈javascript中call()、apply()、bind()的用法
Apr 20 Javascript
浅谈javascript的Array.prototype.slice.call
Aug 31 Javascript
javascript实现计时器的简单方法
Feb 21 Javascript
JS获取随机数和时间转换的简单实例
Jul 10 Javascript
ES6所改良的javascript“缺陷”问题
Aug 23 Javascript
BootStrap网页中代码显示用法详解
Oct 21 Javascript
Node.js+jade抓取博客所有文章生成静态html文件的实例
Sep 19 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和jquery实现地图区域数据统计展示数据示例
2014/02/12 PHP
PHP使用feof()函数读文件的方法
2014/11/07 PHP
在Nginx上部署ThinkPHP项目教程
2015/02/02 PHP
php检测mysql表是否存在的方法小结
2017/07/20 PHP
PHP7 参数处理机制修改
2021/03/09 PHP
在html页面上拖放移动标签
2010/01/08 Javascript
jQuery 开发者应该注意的9个错误
2012/05/03 Javascript
JS中实现replaceAll的方法(实例代码)
2013/11/12 Javascript
javascript对象的使用和属性操作示例详解
2014/03/02 Javascript
使用不同的方法结合/合并两个JS数组
2014/09/18 Javascript
JS实现的自定义网页拖动类
2015/11/06 Javascript
bootstrapValidator.min.js表单验证插件
2017/02/09 Javascript
关于Javascript中document.cookie的使用
2017/03/08 Javascript
jQuery操作DOM_动力节点Java学院整理
2017/07/04 jQuery
JavaScript实现body内任意节点的自定义属性功能示例
2017/09/18 Javascript
简单的vuex 的使用案例笔记
2018/04/13 Javascript
typescript nodejs 依赖注入实现方法代码详解
2019/07/21 NodeJs
node中使用log4js4.x版本记录日志的方法
2019/08/20 Javascript
Ant design vue中的联动选择取消操作
2020/10/31 Javascript
推荐11个实用Python库
2015/01/23 Python
Django中URLconf和include()的协同工作方法
2015/07/20 Python
Python 获得13位unix时间戳的方法
2017/10/20 Python
Python使用Shelve保存对象方法总结
2019/01/28 Python
python3下载抖音视频的完整代码
2019/06/05 Python
python OpenCV GrabCut使用实例解析
2019/11/11 Python
django自定义模板标签过程解析
2019/12/14 Python
Python中实现输入超时及如何通过变量获取变量名
2020/01/18 Python
python实现简单坦克大战
2020/03/27 Python
英国在线定做百叶窗网站:Make My Blinds
2020/08/17 全球购物
SQL Server 2000数据库的文件有哪些,分别进行描述。
2015/11/09 面试题
2014年幼儿园元旦活动方案
2014/02/13 职场文书
刑事辩护授权委托书格式
2014/10/13 职场文书
英语辞职信怎么写
2015/02/28 职场文书
职称评定个人总结
2015/03/05 职场文书
北京青年观后感
2015/06/15 职场文书
Python爬虫基础之简单说一下scrapy的框架结构
2021/06/26 Python