封装微信小程序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 面试题随笔
Mar 31 Javascript
js substring从右边获取指定长度字符串(示例代码)
Dec 23 Javascript
jquery实现弹出层完美居中效果
Mar 03 Javascript
js实现的二级横向菜单条实例
Aug 22 Javascript
浅谈js中的变量名和函数名重名
Feb 13 Javascript
Vue.js基础学习之class与样式绑定
Mar 20 Javascript
vue构建单页面应用实战
Apr 10 Javascript
vue改变对象或数组时的刷新机制的方法总结
Apr 24 Javascript
JS中比Switch...Case更优雅的多条件判断写法
Sep 05 Javascript
layer弹出层自适应高度,垂直水平居中的实现
Sep 16 Javascript
微信小程序实现星级评价
Nov 20 Javascript
vue实现简单计算商品价格
Sep 14 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
destoon会员注册提示“数据校验失败(2)”解决方法
2014/06/21 PHP
thinkphp数据查询和遍历数组实例
2014/11/28 PHP
PHP速成大法
2015/01/30 PHP
Yii实现显示静态页的方法
2016/04/25 PHP
对PHP依赖注入的理解实例分析
2016/10/09 PHP
浅谈PHP拦截器之__set()与__get()的理解与使用方法
2016/10/18 PHP
解决安装WampServer时提示缺少msvcr110.dll文件的问题
2017/07/09 PHP
php简单读取.vcf格式文件的方法示例
2017/09/02 PHP
yii2 上传图片的示例代码
2018/11/02 PHP
pjblog中的UBBCode.js
2007/04/25 Javascript
range 标准化之获取
2011/08/28 Javascript
用JavaScript获取DOM元素位置和尺寸大小的方法
2013/04/12 Javascript
jQuery中hasClass()方法用法实例
2015/01/06 Javascript
jQuery实现的向下图文信息滚动效果
2015/05/03 Javascript
jquery实现动态改变div宽度和高度
2015/05/08 Javascript
vue-cli项目中使用公用的提示弹层tips或加载loading组件实例详解
2018/05/28 Javascript
Webpack的dll功能使用
2018/06/28 Javascript
vue实现动态列表点击各行换色的方法
2018/09/13 Javascript
vue 项目打包时样式及背景图片路径找不到的解决方式
2019/11/12 Javascript
python模仿网页版微信发送消息功能
2018/02/24 Python
Python 一句话生成字母表的方法
2019/01/02 Python
pandas按照列的值排序(某一列或者多列)
2020/12/13 Python
selenium携带cookies模拟登陆CSDN的实现
2021/01/19 Python
python 如何用urllib与服务端交互(发送和接收数据)
2021/03/04 Python
Soft Cotton捷克:来自爱琴海棉花的浴袍
2017/02/01 全球购物
西班牙多品牌鞋店连锁店:Krack
2018/11/30 全球购物
英格兰足协官方商店:England Store
2019/07/12 全球购物
shell程序中如何注释
2012/02/17 面试题
客户代表自我评价范例
2013/09/24 职场文书
社会学专业求职信
2014/02/24 职场文书
就业协议书的作用
2014/04/11 职场文书
2014年党风廉政建设工作总结
2014/11/19 职场文书
2015年前台接待工作总结
2015/05/04 职场文书
推广普通话宣传标语口号
2015/12/26 职场文书
关于保护环境的建议书
2019/06/24 职场文书
sql通过日期判断年龄函数的示例代码
2021/07/16 SQL Server