>위챗 애플릿 >미니 프로그램 개발 >WeChat 애플릿 wx.request의 캡슐화에 대한 자세한 예

WeChat 애플릿 wx.request의 캡슐화에 대한 자세한 예

小云云
小云云원래의
2018-02-07 15:59:294515검색

최근에 제가 직접 소규모 프로그램 개발을 해봤는데 항상 함정이 있긴 한데 요청 부분이 정말 못생긴 것 같아서 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
      })
    })
  }

위 코드는 비즈니스 부분 코드입니다. 다음으로 패키징 방법을 살펴보겠습니다.

Promise를 사용하여 wx.request를 캡슐화합니다

대부분의 당사 웹사이트는 로그인 상태를 유지하기 위해 쿠키를 사용하지만 소규모 프로그램에서는 쿠키를 사용하여 로그인 상태를 유지할 수 없으므로 먼저 해당 쿠키를 얻습니다. 헤더를 요청한 후 쿠키를 저장합니다. 전역 변수 중 (쿠키를 가져오는 것은 문제 없을 거라 생각하는데 이 부분은 보이지 않을 것입니다.)

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

위의 코드는 다음과 같습니다. 단계가 더 많은 것 같지만, 이것의 장점은 비즈니스 코드에서는 유지 관리가 쉽다는 것입니다. 요청 자체도 편리합니다. 물론 매개 변수를 전달하는 방법이 하나만 있으면 작성하기가 더 쉽습니다. 프런트엔드 초보자로서 이것이 가능했으면 좋겠습니다. 내가 가장 바라는 것은 큰 사람들이 당신에게 조언과 조언을 해줄 것이라는 것입니다.

관련 권장 사항:

WeChat 애플릿 wx.request는 백그라운드 데이터 상호 작용 기능 분석을 실현합니다.

애플릿 개발 - 네트워크 요청 wx.request 예제 튜토리얼

애플릿 개발 - wx.request 비동기 캡슐화 예제 튜토리얼

위 내용은 WeChat 애플릿 wx.request의 캡슐화에 대한 자세한 예의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.