封装微信小程序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 相关文章推荐
分享20款好玩的jQuery游戏
Apr 17 Javascript
关于js datetime的那点事
Nov 15 Javascript
node.js中的fs.createReadStream方法使用说明
Dec 17 Javascript
jQuery中:reset选择器用法实例
Jan 04 Javascript
JS+CSS实现分类动态选择及移动功能效果代码
Oct 19 Javascript
javascript每日必学之多态
Feb 23 Javascript
jQuery实现产品对比功能附源码下载
Aug 09 Javascript
JavaScript SHA-256加密算法详细代码
Oct 06 Javascript
JavaScript面试题(指针、帽子和女朋友)
Nov 23 Javascript
Angular2 http jsonp的实例详解
Aug 31 Javascript
jQuery实现的form转json经典示例
Oct 10 jQuery
js实现的在本地预览图片功能示例
Nov 09 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和XSL stylesheets转换XML文档
2006/10/09 PHP
PHP中uploaded_files函数使用方法详解
2011/03/09 PHP
PHP中输出转义JavaScript代码的实现代码
2011/04/22 PHP
smarty内置函数section的用法
2015/01/22 PHP
js获取单选按钮的数据
2006/11/27 Javascript
js调用后台servlet方法实例
2013/06/09 Javascript
javascript在IE下trim函数无法使用的解决方法
2014/09/12 Javascript
jquery和js实现对div的隐藏和显示方法
2014/09/26 Javascript
以Python代码实例展示kNN算法的实际运用
2015/10/26 Javascript
简单谈谈Vue 模板各类数据绑定
2016/09/25 Javascript
jQuery回调方法使用示例
2017/06/26 jQuery
Vue computed计算属性的使用方法
2017/07/14 Javascript
Vue filter介绍及其使用详解
2017/10/21 Javascript
微信小程序实现渐入渐出动画效果
2019/06/13 Javascript
javascript(基于jQuery)实现鼠标获取选中的文字示例【测试可用】
2019/10/26 jQuery
vue 封装 Adminlte3组件的实现
2020/03/18 Javascript
Electron+vue从零开始打造一个本地播放器的方法示例
2020/10/27 Javascript
[40:03]DOTA2上海特级锦标赛主赛事日 - 1 败者组第一轮#1EHOME VS Archon
2016/03/02 DOTA
[01:24:16]2018DOTA2亚洲邀请赛 4.6 全明星赛
2018/04/10 DOTA
python通过yield实现数组全排列的方法
2015/03/18 Python
深入理解Django中内置的用户认证
2017/10/06 Python
python实现数据预处理之填充缺失值的示例
2017/12/22 Python
Python3 中文文件读写方法
2018/01/23 Python
Python基于递归实现电话号码映射功能示例
2018/04/13 Python
python抽取指定url页面的title方法
2018/05/11 Python
pytorch中的embedding词向量的使用方法
2019/08/18 Python
HTML5 canvas基本绘图之绘制阴影效果
2016/06/27 HTML / CSS
甜美蛋糕店创业计划书
2014/01/30 职场文书
2014学年自我鉴定
2014/02/23 职场文书
股权收购意向书
2014/04/01 职场文书
2015年实习班主任工作总结
2015/04/23 职场文书
个人廉政承诺书
2015/04/28 职场文书
中学教师教学工作总结
2015/08/13 职场文书
大学生创业计划书
2019/06/24 职场文书
导游词之山西关帝庙
2019/11/01 职场文书
Python实战实现爬取天气数据并完成可视化分析详解
2022/06/16 Python