小程序封裝request請(qǐng)求

前言

小程序開發(fā)中都會(huì)調(diào)用后端工程師開發(fā)的API,小程序的開發(fā)文檔提供了相對(duì)實(shí)用的API wx.request(),但是在開發(fā)的過程中,又遇到了一些問題,在小程序的項(xiàng)目開發(fā)時(shí),調(diào)用的API不止一個(gè),同一個(gè)API調(diào)用不止一次。同時(shí),對(duì)于調(diào)用的API的管理也十分復(fù)雜,這樣的背景下,對(duì)wx.request()方法的封裝變得尤為重要。

解決思路

  • 將API的路徑放在一個(gè)文件里面方便管理,并暴露出來。
  • 封裝小程序的request方法,并return(本文中用的promise處理)。
  • 具體實(shí)現(xiàn)函數(shù)

實(shí)現(xiàn)

  1. 新建apiList.js文件用于存放適應(yīng)的API接口

let host = 'http://127.0.0.1:3001'   // 設(shè)置API接口的ip地址和端口

let apiList = {

  login: host +'/user/login',     //用戶登錄的API
  
  register: host + '/user/register',   //用戶注冊(cè)的API

  //...

}

module.exports = apiList;    //暴露出來

  1. 新建request.js文件以實(shí)現(xiàn)對(duì)wx.request()的封裝

import apiList from './apiList'   //  引入apiList.js文件

const apiRequest = (url, method, data, header) => {     //接收所需要的參數(shù),如果不夠還可以自己自定義參數(shù)
  let promise = new Promise(function (resolve, reject) {
    wx.request({
      url: url,
      data: data ? data : null,
      method: method,
      header: header ? header : { 'content-type':'application/x-www-form-urlencoded'},
      success: function (res) {
        //接口調(diào)用成功
        resolve(res);    //根據(jù)業(yè)務(wù)需要resolve接口返回的json的數(shù)據(jù)
      },
      fail: function (res) {
        // fail調(diào)用接口失敗
        reject({ errormsg: '網(wǎng)絡(luò)錯(cuò)誤,請(qǐng)稍后重試', code: -1 });
      }
    })
  });
  return promise;  //注意,這里返回的是promise對(duì)象
}

//登錄接口的調(diào)用
let login = (data)=>{
  return new Promise((resolve, reject) => {
    resolve (apiRequest(apiList.login, 'get', data))
  })
}
//注冊(cè)接口的調(diào)用
let register= (data) => {
  return new Promise((resolve, reject) => {
    resolve(apiRequest(apiList.register, 'get', data))
  })
}

//最后需要將具體調(diào)用的函數(shù)暴露出,給具體業(yè)務(wù)調(diào)用

export default {
  login: login,
  register: register
}

3.具體業(yè)務(wù)中的調(diào)用

var api = require('./request.js').default;

//登錄點(diǎn)擊事件
login(){
  /**
  *用戶輸入校驗(yàn)
    TODO
  */
  let params = {
    username:'xxx'
    password:'xxx'
  }
  api.login(params).then(res=>{
      console.log(res)     //API返回的數(shù)據(jù)
      //業(yè)務(wù)處理
  })
}

總結(jié)

通過對(duì)小程序網(wǎng)絡(luò)請(qǐng)求方法的二次封裝,使得我們的代碼看上去更加的簡潔,在接口的管理上也相對(duì)的便利,比如在后端修改API的路徑時(shí),只需要在apiList.js文件中修改相應(yīng)的API即可,也免去了修改時(shí)忽略了更多調(diào)用的麻煩。同時(shí),也提高了代碼的復(fù)用性,一勞永逸。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 給提問的開發(fā)者的建議:提問之前先查詢 文檔、通過社區(qū)右上角搜索搜索已經(jīng)存在的問題。 寫一個(gè)簡明扼要的標(biāo)題,并且...
    極樂叔閱讀 14,649評(píng)論 0 3
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對(duì)...
    cosWriter閱讀 11,689評(píng)論 1 32
  • 今天孩子們放假已是第五天了,這5天過的好漫長,三個(gè)孩子全在家,真的是太鬧了。除了學(xué)習(xí)時(shí)間,那鬧聲,音樂聲...
    愛水的魚魚閱讀 125評(píng)論 0 0
  • 吳小鯉兒閱讀 366評(píng)論 0 3
  • 正在進(jìn)行
    家有寶玉閱讀 107評(píng)論 0 0

友情鏈接更多精彩內(nèi)容