封装微信小程序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 相关文章推荐
csdn 论坛技术区平均给分功能
Nov 07 Javascript
jQuery动态背景图片效果实现方法
Jul 03 Javascript
Javascript实现图片加载从模糊到清晰显示的方法
Jun 21 Javascript
JS构造函数与原型prototype的区别介绍
Jul 04 Javascript
结合代码图文讲解JavaScript中的作用域与作用域链
Jul 05 Javascript
jQuery事件与动画基础详解
Feb 23 Javascript
Vue + better-scroll 实现移动端字母索引导航功能
May 07 Javascript
微信小程序实现底部导航
Nov 05 Javascript
详解Vue中watch的详细用法
Nov 28 Javascript
微信小程序module.exports模块化操作实例浅析
Dec 20 Javascript
详解如何在vscode里面调试js和node.js的方法步骤
Dec 24 Javascript
微信小程序tabBar 返回tabBar不刷新页面
Jul 25 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批量删除数据库下指定前缀的表以prefix_为例
2014/08/24 PHP
thinkphp配置连接数据库技巧
2014/12/02 PHP
codeigniter发送邮件并打印调试信息的方法
2015/03/21 PHP
PHP实现的增强性mhash函数
2015/05/27 PHP
yii添删改查实例
2015/11/16 PHP
Yii框架日志记录Logging操作示例
2018/07/12 PHP
PHP html_entity_decode()函数讲解
2019/02/25 PHP
20个非常有用的PHP类库 加速php开发
2010/01/15 Javascript
JavaScript ECMA-262-3 深入解析.第三章.this
2011/09/28 Javascript
批量修改标签css样式以input标签为例
2014/07/31 Javascript
JS实现仿京东淘宝竖排二级导航
2014/12/08 Javascript
Jquery插件实现点击获取验证码后60秒内禁止重新获取
2015/03/13 Javascript
JS简单实现城市二级联动选择插件的方法
2015/08/19 Javascript
基于jquery实现人物头像跟随鼠标转动
2015/08/23 Javascript
Javascript实现苹果悬浮虚拟按钮
2016/04/10 Javascript
AngularJS基础 ng-open 指令简单实例
2016/08/02 Javascript
node打造微信个人号机器人的方法示例
2018/04/26 Javascript
vue基于element-ui的三级CheckBox复选框功能的实现代码
2018/10/15 Javascript
nodejs微信开发之自动回复的实现
2019/03/17 NodeJs
如何在Node和浏览器控制台中打印彩色文字
2020/01/09 Javascript
原生js无缝轮播插件使用详解
2020/03/09 Javascript
layui实现显示数据表格、搜索和修改功能示例
2020/06/03 Javascript
利用js canvas实现五子棋游戏
2020/10/11 Javascript
Python中条件选择和循环语句使用方法介绍
2013/03/13 Python
Python格式化压缩后的JS文件的方法
2015/03/05 Python
python 通过可变参数计算n个数的乘积方法
2019/06/13 Python
PyCharm2019 安装和配置教程详解附激活码
2020/07/31 Python
PIP和conda 更换国内安装源的方法步骤
2020/09/21 Python
python 可视化库PyG2Plot的使用
2021/01/21 Python
什么是抽象
2015/12/13 面试题
装修致歉信
2014/01/15 职场文书
圆明园纪录片观后感
2015/06/03 职场文书
单位更名证明
2015/06/18 职场文书
2019年暑期安全广播稿!
2019/07/03 职场文书
MySQL数据库完全卸载的方法
2022/03/03 MySQL
详解Go语言中配置文件使用与日志配置
2022/06/01 Golang