封装微信小程序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 字符串乘法
Aug 20 Javascript
关于jquery的多个选择器的使用示例
Oct 18 Javascript
js阻止冒泡及jquery阻止事件冒泡示例介绍
Nov 19 Javascript
JS获取下拉列表所选中的TEXT和Value的实现代码
Jan 11 Javascript
修复bash漏洞的shell脚本分享
Dec 31 Javascript
JS验证IP,子网掩码,网关和MAC的方法
Jul 02 Javascript
AngularJs学习第五篇从Controller控制器谈谈$scope作用域
Jun 08 Javascript
js实现图片切换(动画版)
Dec 25 Javascript
使用vue-cli编写vue插件的方法
Feb 26 Javascript
微信小程序云开发之使用云存储
May 17 Javascript
vue动态禁用控件绑定disable的例子
Oct 28 Javascript
微信小程序自定义扫码功能界面的实现代码
Jul 02 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 项目的方法
2007/01/02 PHP
php一些错误处理的方法与技巧总结
2013/08/10 PHP
PHP中的use关键字及文件的加载详解
2016/11/28 PHP
PHP/ThinkPHP实现批量打包下载文件的方法示例
2017/07/31 PHP
给Javascript数组插入一条记录的代码
2007/08/30 Javascript
js模拟点击事件实现代码
2012/11/06 Javascript
JS中window.open全屏命令解析及使用示例
2013/12/11 Javascript
jQuery的几个我们必须了解的特点
2015/05/03 Javascript
不得不分享的JavaScript常用方法函数集(上)
2015/12/23 Javascript
jQuery模拟物体自由落体运动(附演示与demo源码下载)
2016/01/21 Javascript
AngularJS基于ngInfiniteScroll实现下拉滚动加载的方法
2016/12/14 Javascript
NodeJS自定义模块写法(详解)
2017/06/27 NodeJs
详解Element 指令clickoutside源码分析
2019/02/15 Javascript
使用Layer组件弹出多个对话框(非嵌套)与关闭及刷新的例子
2019/09/25 Javascript
vue搜索页开发实例代码详解(热门搜索,历史搜索,淘宝接口演示)
2020/04/11 Javascript
[05:31]DOTA2上海特级锦标赛主赛事第三日RECAP
2016/03/05 DOTA
python文件比较示例分享
2014/01/10 Python
Python中的作用域规则详解
2015/01/30 Python
Python3读取文件常用方法实例分析
2015/05/22 Python
Python2.x利用commands模块执行Linux shell命令
2016/03/11 Python
Python中标准模块importlib详解
2017/04/16 Python
Django中redis的使用方法(包括安装、配置、启动)
2018/02/21 Python
Python Flask前后端Ajax交互的方法示例
2018/07/31 Python
在Python中居然可以定义两个同名通参数的函数
2019/01/31 Python
python实现两个文件夹的同步
2019/08/29 Python
python利用google翻译方法实例(翻译字幕文件)
2020/09/21 Python
推荐WEB开发者最佳HTML5和CSS3代码生成器
2015/11/24 HTML / CSS
美国高级音响品牌:Master&Dynamic
2018/07/05 全球购物
Yves Rocher捷克官方网站:植物化妆品的创造者
2019/07/31 全球购物
《二泉映月》教学反思
2014/04/15 职场文书
培训督导岗位职责
2015/04/10 职场文书
公司团队口号霸气押韵
2015/12/24 职场文书
签证扫盲贴,41个常见签证知识,需要的拿走
2019/08/09 职场文书
MySQL 分页查询的优化技巧
2021/05/12 MySQL
VS2019连接MySQL数据库的过程及常见问题总结
2021/11/27 MySQL
Windows Server 2019 安装DHCP服务及相关配置
2022/04/28 Servers