微信小程序 wx.request 封装实例详细解析与探讨

why 130 2024-10-08 09:15:35

最近自己尝试了一下小程序开发,坑么总是有的,但是我觉得还是request这部分实在是不好看,所以你懂得,我用promise 对请求做了个简单封装。本文章所述方法主要针对第三方登录。

废话不多说直接贴代码:

业务相关 js

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

// 获取剩余金额 --- 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 肯定没问题吧, 这部分就不展示了)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

// 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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

// 用 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 切换也方便,当然如果你们的传参方式只有一种可以写死更简单一些,作为前端菜鸟的第一篇文章希望能帮助到几个人,最希望大佬们不吝赐教,指点指点。


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:微信小程序媒体组件实例详细分析与解读
下一篇:微信小程序 live-pusher 疑惑全面解答与剖析
相关文章