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

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

首发感言

自学转行到前端也已近两年,也算是简书和掘金的忠实粉丝,但是以前一直惜字如金(实在是胆子小,水平又低),现在我决定视金钱如粪土(就只是脸皮厚了,水平就那样),好了废话不多说,切入主题,最近自己尝试了一下小程序开发,坑么总是有的,但是我觉得还是request这部分实在是不好看,所以你懂得,我用Promise 对请求做了个简单封装。本文章所述方法主要针对第三方登录

废话不多说直接贴代码:

业务相关 js

// 获取剩余金额 --- GET 请求无参数  getBalance: function () {    api.getBalance().then(data => {      let balance = data.data      balance.balance = balance.balance.toFixed(2)      this.setData({        balance: { ...balance }      })    })  },  // 获取昨日消费数据 --- POST 请求,使用 application/x-www-form-urlencoded 传参  getLastCost: function () {    let yestoday = util.transDate('', -1)    let data = {      subAccountIdx: 0,      startDay: yestoday,      endDay: yestoday,      type: 0,      business: 0,      export: false    }    api.getLastCost(data, 'application/x-www-form-urlencoded', 'POST').then(data => {      let lastCost = data.data.record.totalConsumeMoney      lastCost = lastCost.toFixed(2)      this.setData({        lastCost: lastCost      })    })  }复制代码

从上面的代码是业务部分代码,不知道你是否喜欢这种方式呢,接下来就看看 封装方式 和 业务对应的配置 js

使用 Promise 封装 wx.request

我们大部分网站都是用 cookie 来维护登录状态的,但是小程序是无法用 cookie 来维护登录状态的,那么我们先获取请求头的 cookie, 然后将 cookie 保存在全局变量当中(相信获取 cookie 肯定没问题吧, 这部分就不展示了)

// wx.request 封装var app = getApp() function wxRequest(url, config, resolve, reject) {  let {     data = {},    contentType = 'application/json',    method = 'GET',    ...other  } = {...config}  wx.request({    url: url,    data: {...data},    method: method,    header: {      'content-type': contentType,      'Cookie': app.globalData.cookie  // 全局变量中获取 cookie    },    success: (data) => resolve(data),    fail: (err) => reject(err)  })}module.exports = {  wxRequest: wxRequest}复制代码

封装的代码很简单,接下来就是配置代码了

业务对应的配置 js

// 用 import 或者 require 引入模块 import util from '../../../util/util.js'var Promise = require('../../../plugin/promise.js')    // 请注意 Promise 要手动引入,内测版是自动引入的// 获取个人信息const API_USERINFO = "https://www.***/get"// 获取剩余金额const API_BALANCE = 'https://www.***/get'// 获取昨日消费数据const API_LASTCOST = 'https://www.***/get'// 获取个人信息事件  function getUserInfo(data, contentType) {  var promise = new Promise((resolve, reject) => {    util.wxRequest(API_USERINFO, { data, contentType }, resolve, reject)  })  // return promise  return promise.then(res => {    return res.data  }).catch(err => {    console.log(err)   })}// 获取剩余金额事件function getBalance(data, contentType) {  var promise = new Promise((resolve, reject) => {    util.wxRequest(API_BALANCE, { data, contentType }, resolve, reject)  })  // return promise  return promise.then(res => {    return res.data  }).catch(err => {    console.log(err)  })}// 获取昨日消费数据function getLastCost(data, contentType, method) {  var promise = new Promise((resolve, reject) => {    util.wxRequest(API_LASTCOST, { data, contentType, method }, resolve, reject)  })  // return promise  return promise.then(res => {    return res.data  }).catch(err => {    console.log(err)  })}module.exports = {  getUserInfo: getUserInfo,  getBalance: getBalance,  getLastCost: getLastCost}复制代码

上面的代码看起来像是步骤变多了,但是这样的好处是维护方便,在业务代码里只关注业务,而不用去关注请求的本身,content-type 切换也方便,当然如果你们的传参方式只有一种可以写死更简单一些,作为前端菜鸟的第一篇文章希望能帮助到几个人,最希望大佬们不吝赐教,指点指点。

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

你可能感兴趣的文章
Bootstrap网格
查看>>
IM(XMPP)介绍
查看>>
HDU3188 Just A Triangle【水题】
查看>>
HDU3782 xxx定律【数学计算+水题】
查看>>
趣味程序之趣味系列
查看>>
8.使用下拉列表框进行多选
查看>>
@responseBody注解的使用
查看>>
用maven在eclipse中创建Web项目
查看>>
移动端web开发JS使用Date()的值为invalid Date或者为NaN
查看>>
聊一聊python的单例模式
查看>>
redis应用场景:实现简单计数器-防止刷单
查看>>
python——元组和字典学习笔记
查看>>
面试遇到的问题(被虐了就更新)
查看>>
Windows Phone 8.1 数据处理
查看>>
Jsp页面用table表格来让文字和文本框对齐
查看>>
nodejs加解密
查看>>
LeetCode | Set Matrix Zeroes
查看>>
Eclipse 安装 SVN 插件的两种方法
查看>>
手闲 用Lua写了个批量修改文件后缀名的小工具
查看>>
蘑菇定律
查看>>