微信小程序 wx.request 的封裝 - 新聞資(zī)訊 - 雲南小程序開發|雲南軟件開發|雲南網站(zhàn)建設-西山區知普網絡科技工作室

159-8711-8523

雲南網建設/小程序開發/軟件開發

知識

不管是網站(zhàn),軟件還是小程序,都要直接或間接能為您産生價值,我們在追求其視覺表現的同時,更側重于功能的便捷,營銷的便利,運營的高效,讓網站(zhàn)成為營銷工具,讓軟件能切實提升企業(yè)内部管理水平和(hé)效率。優秀的程序為後期升級提供便捷的支持!

微信小程序 wx.request 的封裝

發表時間:2021-3-31

發布人:葵宇科技

浏覽次數:36

自學轉行到前端也已近兩年,也算是簡書和(hé)掘金的忠實粉絲,但是以前一直惜字如(rú)金(實在是膽子(zǐ)小,水平又低),現在我決定視金錢如(rú)糞土(tǔ)(就隻是臉皮厚了,水平就那樣),好了廢話不多說,切入主題,最近自己嘗試了一下(xià)小程序開發,坑麼總是有的,但是我覺得還是request這部分實在是不好看,所以你(nǐ)懂得,我用Promise 對請求做了個(gè)簡單封裝。本文(wén)章所述方法主要針對第三方登錄

廢話不多說直接貼代碼:

業(yè)務相關(guān) 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 = https://www.wxapp-union.com/{
      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
      })
    })
  }

從上面的代碼是業(yè)務部分代碼,不知道你(nǐ)是否喜歡這種方式呢(ne),接下(xià)來就看看 封裝方式 和(hé) 業(yè)務對應的配置 js

使用 Promise 封裝 wx.request

我們大部分網站(zhàn)都是用 cookie 來維護登錄狀态的,但是小程序是無法用 cookie 來維護登錄狀态的,那麼我們先獲取請求頭的 cookie, 然後将 cookie 保存在全局變量當中(zhōng)(相信獲取 cookie 肯定沒問(wèn)題吧, 這部分就不展示了)

// wx.request 封裝
var app = getApp() 

function wxRequest(url, config, resolve, reject) {
  let { 
    data = https://www.wxapp-union.com/{},
    contentType = 'application/json',
    method = 'GET',
    ...other
  } = {...config}
  wx.request({
    url: url,
    data: {...data},
    method: method,
    header: {
      'content-type': contentType,
      'Cookie': app.globalData.cookie  // 全局變量中(zhōng)獲取 cookie
    },
    success: (data) => resolve(data),
    fail: (err) => reject(err)
  })
}

module.exports = {
  wxRequest: wxRequest
}

封裝的代碼很簡單,接下(xià)來就是配置代碼了

業(yè)務對應的配置 js

// 用 import 或者 require 引入模塊 
import util from '../../../util/util.js'
var Promise = require('../../../plugin/promise.js')    // 請注意 Promise 要手動(dòng)引入,内測版是自動(dòng)引入的

// 獲取個(gè)人信息
const API_USERINFO = "https://www.***/get"
// 獲取剩餘金額
const API_BALANCE = 'https://www.***/get'
// 獲取昨日消費數據
const API_LASTCOST = 'https://www.***/get'


// 獲取個(gè)人信息事件  
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
}

上面的代碼看起來像是步驟變多了,但是這樣的好處是維護方便,在業(yè)務代碼裡隻關(guān)注業(yè)務,而不用去關(guān)注請求的本身,content-type 切換也方便,當然如(rú)果你(nǐ)們的傳參方式隻有一種可(kě)以寫死更簡單一些,作為前端菜鳥的第一篇文(wén)章希望能幫助到幾個(gè)人,最希望大佬們不吝賜教,指點指點。

相關(guān)案例查看更多