封装微信小程序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 相关文章推荐
node.js中的buffer.copy方法使用说明
Dec 14 Javascript
javascript使用appendChild追加节点实例
Jan 12 Javascript
举例详解Python中smtplib模块处理电子邮件的使用
Jun 24 Javascript
jQuery实现的超简单点赞效果实例分析
Dec 31 Javascript
深入浅析JavaScript面向对象和原型函数
Feb 06 Javascript
详解vue跨组件通信的几种方法
Jun 15 Javascript
js+html制作简单日历的方法
Jun 27 Javascript
vue中路由验证和相应拦截的使用详解
Dec 13 Javascript
从零开始学习搭建React脚手架项目
Aug 23 Javascript
Vue中div contenteditable 的光标定位方法
Aug 25 Javascript
详解vue路由
Aug 05 Javascript
ESLint 是如何检查 .vue 文件的
Nov 30 Vue.js
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
AMFPHP php远程调用(RPC, Remote Procedure Call)工具 快速入门教程
2010/05/10 PHP
PHP得到mssql的存储过程的输出参数功能实现
2012/11/23 PHP
php实现的替换敏感字符串类实例
2014/09/22 PHP
php实现的Timer页面运行时间监测类
2014/09/24 PHP
微信公众平台接口开发入门示例
2014/12/24 PHP
mod_php、FastCGI、PHP-FPM等PHP运行方式对比
2015/07/02 PHP
javascript下4个跨浏览器必备的函数
2010/03/07 Javascript
jQuery插件原来如此简单 jQuery插件的机制及实战
2012/02/07 Javascript
.net,js捕捉文本框回车键事件的小例子(兼容多浏览器)
2013/03/11 Javascript
JQuery中SetTimeOut传参问题探讨
2013/05/10 Javascript
调用HttpHanlder的几种返回方式小结
2013/12/20 Javascript
jQuery防止click双击多次提交及传递动态函数或多参数
2014/04/02 Javascript
jQuery 获取、设置HTML或TEXT内容的两种方法
2014/05/23 Javascript
js实现iframe跨页面调用函数的方法
2014/12/13 Javascript
ECMAScript中函数function类型
2015/06/03 Javascript
Node.js 文件夹目录结构创建实例代码
2016/07/08 Javascript
springMVC结合AjaxForm上传文件
2016/07/12 Javascript
原生js封装的一些jquery方法(详解)
2016/09/20 Javascript
想学习javascript JS和jQuery哪个重要 先学哪个
2016/12/11 Javascript
bootstrap 设置checkbox部分选中效果
2017/04/20 Javascript
全面解析Node.js 8 重要功能和修复
2017/06/02 Javascript
vue组件发布到npm简单步骤
2017/11/30 Javascript
JavaScript面向对象中接口实现方法详解
2019/07/24 Javascript
[49:18]2018DOTA2亚洲邀请赛 3.31 小组赛 A组 OG vs TNC
2018/04/01 DOTA
Python文件如何引入?详解引入Python文件步骤
2018/12/10 Python
浅析Python与Mongodb数据库之间的操作方法
2019/07/01 Python
python爬虫解决验证码的思路及示例
2019/08/01 Python
贝嫂喜欢的婴儿品牌,个性化的婴儿礼物:My 1st Years
2017/11/19 全球购物
什么是java序列化,如何实现java序列化
2012/11/14 面试题
财务经理岗位职责
2013/11/09 职场文书
会议欢迎词
2015/01/23 职场文书
2015年教师业务工作总结
2015/05/26 职场文书
建国大业观后感600字
2015/06/01 职场文书
学会感恩主题班会
2015/08/12 职场文书
Python一些基本的图像操作和处理总结
2021/06/23 Python
shell进度条追踪指令执行时间的场景分析
2022/06/16 Servers