微信小程序 wx.request 的封装

转载 2018年02月03日 15:49:14

自学转行到前端也已近两年,也算是简书和掘金的忠实粉丝,但是以前一直惜字如金(实在是胆子小,水平又低),现在我决定视金钱如粪土(就只是脸皮厚了,水平就那样),好了废话不多说,切入主题,最近自己尝试了一下小程序开发,坑么总是有的,但是我觉得还是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 切换也方便,当然如果你们的传参方式只有一种可以写死更简单一些,作为前端菜鸟的第一篇文章希望能帮助到几个人,最希望大佬们不吝赐教,指点指点。

本文作者: frontX 
原文地址:微信小程序 wx.request 的封装
声明:本文来源于网络,版权归作者所有,不代表本专栏观点,有什么问题请联系我,谢谢!

微信小程序 wx.request 的封装

自学转行到前端也已近两年,也算是简书和掘金的忠实粉丝,但是以前一直惜字如金(实在是胆子小,水平又低),现在我决定视金钱如粪土(就只是脸皮厚了,水平就那样),好了废话不多说,切入主题,最近自己尝试了一下...
  • rolan1993
  • rolan1993
  • 2018年02月03日 15:49
  • 385

微信小程序github源码大全下载

微信小程序实例源码大全下载 微信小应用示例代码(phodal/weapp-quick) 源码链接:https://github.com/phodal/weapp-quick 微信小应用地图定位de...
  • rolan1993
  • rolan1993
  • 2017年06月05日 17:10
  • 4297

微信小程序网络请求的封装与填坑之路

以前写过一篇关于微信小程序上拉加载,上拉刷新的文章,今天写的是关于小程序网络请求的封装。 在这里首先声明一个小程序文档的bug,导致大伙们在请求的时候,服务器收到不到参数的问题示例代码:wx.req...
  • u010046908
  • u010046908
  • 2016年11月15日 12:53
  • 6591

微信小程序 request请求封装(包括登录)

这段时间都在开发小程序。封装是少不了的部分。经过三轮的修改修改再修改之后,得到了下面现在一直在用的这版。如果小伙伴你只需要封装,不考虑需不需要重新登录的话可以把if(res.data.code ==5...
  • qq_34672907
  • qq_34672907
  • 2017年10月24日 11:24
  • 544

hexo+github 终于有了自己的博客!

前言 博客终于有了最初的雏形,兴奋之情难以言表。 搭建博客是我很早之前的一个小目标,在通过自己努力后终于迈开了小小的一步,兴奋之余便要着手准备把此博客好好运营下去。 为什么写博客? ...
  • tian330726
  • tian330726
  • 2018年01月21日 14:59
  • 34

github精选:微信小程序踩坑集合(更新)

http://www.wxapp-union.com/article-1070-1.html 分享者:senola,GitHub地址:https://github.com/senola/we...
  • sinat_17775997
  • sinat_17775997
  • 2017年01月12日 23:26
  • 4219

微信小程序 用Promise封装wx.request(),简化代码结构

在app.js中 添加自定义post方法 //app.js App({ //other code... /** * 自定义post函数,返回Promise ...
  • abs1004
  • abs1004
  • 2018年01月28日 17:59
  • 75

微信小程序 wx.request wepy 简单封装

本文出自: http://blog.csdn.net/wyk304443164 很简单// let requestHandler = { // url: '', // params: {}...
  • wyk304443164
  • wyk304443164
  • 2017年10月28日 11:18
  • 685

GitHub 上都有哪些值得关注学习的 iOS 开源项目?

GitHub 上都有哪些值得关注学习的 iOS 开源项目?修改 如果仅按照 GitHub 月流行查看 Objective-C 项目的话有 ── Trending Objective-C re...
  • kepoon
  • kepoon
  • 2014年09月30日 14:32
  • 11843

为什么找程序员一定要看他的 GitHub

http://www.myexception.cn/other/1857745.html http://www.myexception.cn/other/1857745.html ...
  • u011904605
  • u011904605
  • 2016年12月08日 16:24
  • 918
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:微信小程序 wx.request 的封装
举报原因:
原因补充:

(最多只允许输入30个字)