博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
小程序(wx.request) 封装
阅读量:5945 次
发布时间:2019-06-19

本文共 2358 字,大约阅读时间需要 7 分钟。

小程序 之 ajax 封装 与 类似cookie 用户凭证模拟

思路:
刚做小程序时,发现 要用 wx.request 去向服务器获取数据:
用法:

wx.request({  url: 'test.php', //仅为示例,并非真实的接口地址  data: {     x: '' ,     y: ''  },  header: {      'content-type': 'application/json' // 默认值  },  success: function(res) {    console.log(res.data)  }})

1.不可能在每个页面,去调用 低级版本的wx.reuqest 方法, 为 每个方法 再配置 header等等。

这样做不便于维护,所以为了维护统一的一个获取服务器数据的方法,把wx.request封装一层,把公共的header和其他配置信息放到里面。
2.为了解决 地狱回调问题(即success 里 再调用 wx.request),所以采用 加一层Promise 封装,让它以链式调用。
3.用户登陆凭证信息可以放在header头里面, 或者还可以直接放在 data。具体靠自己选择(
Object.assign(header, {authheader: '登陆凭证'})
或者
Object.assign(data, {authheader: '登陆凭证'})
), 我采用第一种方式。
// common/index.js

// 函数代码  存储凭证信息const {AUTHHEADER} = require('../config');// 获取 凭证module.exports.getAuthMsg = () => {  // 原始信息  let {loseTime, authMsg} = wx.getStorageSync(AUTHHEADER) || {};  loseTime = parseInt(loseTime);  if (loseTime) {    // 未失效    if (loseTime > (new Date()).getTime() && authMsg) {      return authMsg    }  }   wx.removeStorageSync(AUTHHEADER)  return '';};// 设置凭证module.exports.setAuthMsg = (authMsg) => {  let loseTime = (new Date()).getTime() + (60 * 60 * 1000 * 24) * 15;  wx.setStorageSync(AUTHHEADER,{    authMsg,    loseTime  })};

// ajax.js

const { getAuthMsg} = require('../common/index.js');module.exports =  ({  url,  header = {},  data,  method = 'POST',}) => {  return new Promise((r, j) => {   // 获取用户信息    const authHeader = getAuthMsg();    // 包装header    header = Object.assign({       // ajax 模拟头部      'X-Requested-With': 'XMLHttpRequest',       // 传输数据格式      'Content-Type': 'application/x-www-form-urlencoded',       // 鉴权信息 类似于cookie        'authheader': authHeader,    }, header);    url = `${baseDomain}/${url}`;    wx.request({      url,      method,      header,      data,      success (res) {        let { data: { data, flag, msg, code } } = res;        // 返回信息正常        if (flag === 1) {          return r({data})        }        // 对应---报错信息        switch (code) {          case '***1': {            r({              msg,              code            })            break;          }          case '***2': {            r({msg, code});            break;          }          case '***3' : {            r({msg, code});            break;          }          default: {            j({ msg, res})          }        }      },      fail (e) {        j({ msg: "网络错误" });      }    })   })}

转载地址:http://juzxx.baihongyu.com/

你可能感兴趣的文章
充电电池和充电时间说明
查看>>
输出昨天的当前时刻
查看>>
字段为NULL导致MyBatis在Oracle上执行SQL报错,无效的列类型
查看>>
知识点2-对二进制的运用
查看>>
PAT 1102 Invert a Binary Tree[比较简单]
查看>>
理解 JavaScript 作用域和作用域链
查看>>
Beta冲刺提交-星期四
查看>>
人工神经网络
查看>>
信用分计算(自研)
查看>>
055——VUE中vue-router之路由参数的随意设置与伪静态链接地址处理:
查看>>
迭代器
查看>>
性能压测,SQL查询异常
查看>>
JMessage Android 端开发详解
查看>>
Console命令详解,让调试js代码变得更简单
查看>>
一本通 1285:最大上升子序列和
查看>>
关于UseSubmitBehavior和OnClientClick同时使用,导致无法触发后台事件的问题
查看>>
《小岛经济学--鱼、美元和经济的故事》Digest
查看>>
深入浅出 消息队列 ActiveMQ(转)
查看>>
oracle client server那点事
查看>>
坐飞机的一个现象
查看>>