封装微信小程序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 加号(+)运算符号
Dec 06 Javascript
javascript字符串拼接的效率问题
Dec 25 Javascript
利用了jquery的ajax实现二级联互动菜单
Dec 02 Javascript
js实现带有介绍的Select列表菜单实例
Aug 18 Javascript
Jquery实现select multiple左右添加和删除功能的简单实例
May 26 Javascript
Angularjs中的页面访问权限怎么设置
Nov 11 Javascript
javascript中Number的方法小结
Nov 21 Javascript
vue.js实现备忘录功能的方法
Jul 10 Javascript
js使用xml数据载体实现城市省份二级联动效果
Nov 08 Javascript
推荐10款扩展Web表单的JS插件
Dec 25 Javascript
js中script的上下放置区别,Dom的增删改创建操作实例分析
Dec 16 Javascript
vue祖孙组件之间的数据传递案例
Dec 07 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
PHP获取文件后缀名的三个函数
2012/10/15 PHP
ThinkPHP的cookie和session冲突造成Cookie不能使用的解决方法
2014/07/01 PHP
服务器上配置PHP运行环境教程
2015/02/12 PHP
php显示指定目录下子目录的方法
2015/03/20 PHP
Yii2创建多界面主题(Theme)的方法
2016/10/08 PHP
php str_getcsv把字符串解析为数组的实现方法
2017/04/05 PHP
微信接口生成带参数的二维码
2017/07/31 PHP
PHP+redis实现微博的拉模型案例详解
2019/07/10 PHP
FCK调用方法..
2006/12/21 Javascript
Js-$.extend扩展方法使方法参数更灵活
2013/01/15 Javascript
js Select下拉列表框进行多选、移除、交换内容的具体实现方法
2013/08/13 Javascript
node.js中的fs.lstatSync方法使用说明
2014/12/16 Javascript
jquery实现浮动的侧栏实例
2015/06/25 Javascript
JavaScript使用DeviceOne开发实战(三)仿微信应用
2015/12/02 Javascript
设置jQueryUI DatePicker默认语言为中文
2016/06/04 Javascript
javascript基础知识讲解
2017/01/11 Javascript
RequireJS 依赖关系的实例(推荐)
2017/01/21 Javascript
Vue filters过滤器的使用方法
2017/07/14 Javascript
Vue 中axios配置实例详解
2018/07/27 Javascript
[44:50]DOTA2上海特级锦标赛B组小组赛#2 VG VS Fnatic第二局
2016/02/26 DOTA
python2.7到3.x迁移指南
2018/02/01 Python
tensorflow获取变量维度信息
2018/03/10 Python
解决pandas 作图无法显示中文的问题
2018/05/24 Python
使用python爬取B站千万级数据
2018/06/08 Python
Python实现求两个数组交集的方法示例
2019/02/23 Python
Python序列化与反序列化pickle用法实例
2019/11/11 Python
python 利用zmail库发送邮件
2020/09/11 Python
英国第二大营养品供应商:Vitabiotics
2016/10/01 全球购物
迪拜航空官方网站:flydubai
2017/04/20 全球购物
廉价航班、机票和酒店:JustFly
2018/02/07 全球购物
工作疏忽、懈怠的检讨书
2014/09/11 职场文书
2015年妇委会工作总结
2015/05/22 职场文书
亮剑观后感
2015/06/05 职场文书
二年级数学教学反思
2016/02/16 职场文书
Python面向对象编程之类的概念
2021/11/01 Python
Python使用DFA算法过滤内容敏感词
2022/04/22 Python