微信小程序教學第二章(含視頻):小程序中級實戰教程之預備篇 - 封裝網絡請求及 mock 數據

§ 封裝網絡請求及 mock 數據

本文配套視頻地址: v.qq.com/x/page/i055…html


開始前請把 ch2-3 分支中的 code/ 目錄導入微信開發工具前端


上一節中,咱們對 index.js 文件中增長了 util 對象,並在對象中封裝了不少公用方法json

let util = {
  log(){……},
  alert(){……},
  getStorageData(){……},
  setStorageData(){……}
}
複製代碼

本節中,咱們對經常使用的網絡請求方法 wx.request 進行封裝小程序

let util = {
    // 此處省略部分代碼
    request(opt){
      let {url, data, header, method, dataType} = opt
      let self = this
      return new Promise((resolve, reject)=>{
        wx.request({
          url: url,
          data: data,
          header: header,
          method: method,
          dataType: dataType,
          success: function (res) {
            if (res && res.statusCode == 200 && res.data) {
              resolve(res.data);
            } else {
              self.alert('提示', res);
              reject(res);
            }
          },
          fail: function (err) {
            self.log(err);
            self.alert('提示', err);
            reject(err);
          }
        })
      })
    }
  }
複製代碼

對於請求的參數,咱們設置下默認值,方便調用微信小程序

const DEFAULT_REQUEST_OPTIONS = {
    url: '',
    data: {},
    header: {
      "Content-Type": "application/json"
    },
    method: 'GET',
    dataType: 'json'
  }

  let util = {
    // 此處省略部分代碼
    request (opt){
      let options = Object.assign({}, DEFAULT_REQUEST_OPTIONS, opt)
      let {url, data, header, method, dataType, mock = false} = options
      let self = this
      // 此處省略部分代碼 
    }
  }
複製代碼

若是是本地開發調試,須要增長咱們的 mock 假數據,對 util.request 進行修改api

let util = {
    // 此處省略部分代碼
    request (opt){
      let options = Object.assign({}, DEFAULT_REQUEST_OPTIONS, opt)
      let {url, data, header, method, dataType, mock = false} = options
      let self = this
      return new Promise((resolve, reject)=>{
        if(mock){
          let res = {
            statusCode: 200,
            data: Mock[url]
          }
          if (res && res.statusCode == 200 && res.data) {
            resolve(res.data);
          } else {
            self.alert('提示', res);
            reject(res);
          }
        }else{
          wx.request({
            url: url,
            data: data,
            header: header,
            method: method,
            dataType: dataType,
            success: function (res) {
              if (res && res.statusCode == 200 && res.data) {
                resolve(res.data);
              } else {
                self.alert('提示', res);
                reject(res);
              }
            },
            fail: function (err) {
              self.log(err);
              self.alert('提示', err);
              reject(err);
            }
          })   
        }
      })
      
    }
  }
複製代碼

若是請求接口調用時候,包含有參數 mock = true,會自動調用相應的 mock 數據,若是沒有這個參數,就走正常流程去調數據。微信


調用方法以下:網絡

util.request({
    url: 'list',
    mock: true,
    data: {
      tag:'微信熱門',
      start: 1,
      days: 3,
      pageSize: 5,
      langs: 'en'
    }
  }).then(res => {
    // do something
  })
複製代碼

iKcamp官網:www.ikcamp.com微信開發

訪問官網更快閱讀所有免費分享課程:《iKcamp出品|全網最新|微信小程序|基於最新版1.0開發者工具之初中級培訓教程分享》。 包含:文章、視頻、源代碼app

iKcamp原創新書《移動Web前端高效開發實戰》已在亞馬遜、京東、噹噹開售。

iKcamp最新活動

報名地址:www.huodongxing.com/event/54099…

「每天練口語」小程序總榜排名第4、教育類排名第一的研發團隊,面對面溝通交流。


2019年,iKcamp原創新書《Koa與Node.js開發實戰》已在京東、天貓、亞馬遜、噹噹開售啦!

相關文章
相關標籤/搜索