封装微信小程序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  THIS详解 面向对象
Mar 25 Javascript
自动最大化窗口的Javascript代码
May 22 Javascript
浅谈JavaScript正则表达式分组匹配
Apr 10 Javascript
JavaScript判断数组是否包含指定元素的方法
Jul 01 Javascript
jQuery点击改变class并toggle及toggleClass()方法定义用法
Dec 11 Javascript
很实用的js选项卡切换效果
Aug 12 Javascript
AngularJS入门教程之模块化操作用法示例
Nov 02 Javascript
AngularJS表单和输入验证实例
Nov 02 Javascript
BootStrap 下拉菜单点击之后不会出现下拉菜单(下拉菜单不弹出)的解决方案
Dec 14 Javascript
JavaScript基于replace+正则实现ES6的字符串模版功能
Apr 25 Javascript
React Native react-navigation 导航使用详解
Dec 01 Javascript
JavaScript实现HSL拾色器
May 21 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压缩多个CSS为一个css的代码并缓存
2011/04/21 PHP
用Php编写注册后Email激活验证的实例代码
2013/03/11 PHP
PHP输出日历表代码实例
2015/03/27 PHP
PHP命名空间namespace用法实例分析
2016/09/27 PHP
通过Javascript读取本地Excel文件内容的代码示例
2014/04/08 Javascript
JavaScript中读取和保存文件实例
2014/05/08 Javascript
Egret引擎开发指南之发布项目
2014/09/03 Javascript
node.js中格式化数字增加千位符的几种方法
2015/07/03 Javascript
jQuery右下角旋转环状菜单特效代码
2015/08/10 Javascript
基于BootStrap Metronic开发框架经验小结【一】框架总览及菜单模块的处理
2016/05/12 Javascript
基于Bootstrap里面的Button dropdown打造自定义select
2016/05/30 Javascript
three.js绘制地球、飞机与轨迹的效果示例
2017/02/28 Javascript
在vue中解决提示警告 for循环报错的方法
2018/09/28 Javascript
基于vue.js组件实现分页效果
2018/12/29 Javascript
JavaScript中concat复制数组方法浅析
2019/01/20 Javascript
vue 动态设置img的src地址无效,npm run build 后找不到文件的解决
2020/07/26 Javascript
vue 数据遍历筛选 过滤 排序的应用操作
2020/11/17 Javascript
使用Python脚本在Linux下实现部分Bash Shell的教程
2015/04/17 Python
从Python的源码来解析Python下的freeblock
2015/05/11 Python
python保存字符串到文件的方法
2015/07/01 Python
在Django同1个页面中的多表单处理详解
2017/01/25 Python
Python中if elif else及缩进的使用简述
2018/05/31 Python
django与小程序实现登录验证功能的示例代码
2019/02/19 Python
Django 实现admin后台显示图片缩略图的例子
2019/07/28 Python
Django项目之Elasticsearch搜索引擎的实例
2019/08/21 Python
python中复数的共轭复数知识点总结
2020/12/06 Python
CSS3 :default伪类选择器使用简介
2018/03/15 HTML / CSS
户籍证明的格式
2014/01/13 职场文书
优秀体育委员自荐书
2014/01/31 职场文书
社区平安建设汇报材料
2014/08/14 职场文书
学校安全工作汇报材料
2014/08/16 职场文书
诉讼授权委托书
2014/10/15 职场文书
2015年初中元旦晚会活动总结
2014/11/28 职场文书
感谢信的技巧及范例
2019/05/15 职场文书
springboot+VUE实现登录注册
2021/05/27 Vue.js
pandas中对文本类型数据的处理小结
2021/11/01 Python