[微信小程序]封裝HTTP

好記性不如爛筆頭

網(wǎng)絡(luò)請求是小程序中必不可少的一部分,而且使用頻率也很高吧秕,雖然小程序提供的網(wǎng)絡(luò)請求組件已經(jīng)封裝的很方便琉闪,但還是有必要根據(jù)業(yè)務(wù)具體封裝一下,還是那一句話:不輕視任何一個知識點砸彬!

一颠毙、 響應(yīng)式

1. 封裝

① 創(chuàng)建http.js文件, 定義HTTP
② 定義公用請求方法
③ 導(dǎo)出當(dāng)前類

http.js文件砂碉,這是我根據(jù)我后臺的邏輯封裝的響應(yīng)式HTTP請求工具
我后臺的規(guī)則是000000代表請求成功蛀蜜,000005代表token失效需要重新登錄

class HTTP {
  request(params) {
    if (!params.method) {
      params.method = 'GET'
    }
    wx.request({
      url: '主網(wǎng)址' + params.url,
      method: params.method,
      data: params.data,
      header: {
        'content-type': 'application/json'
      },
      success: (res) => {
        let code = res.data.resp_code.toString()
        if (code == '000000') {
          params.success && params.success(res.data)
        }else if (code == '000005') {
          this. _showToast('token失效,請重新登錄')
        }else {
          let msg = res.data.resp_message
          this._showToast(msg)
        }
      },
      fail: (err) => {
        this._showToast('請求出錯增蹭,請稍后重試')
      }
    })
  }

  _showToast(title) {
    wx.showToast({
      title: title,
      icon: 'none',
      duration: 2000
    })
  }
}

export {HTTP}
2. 調(diào)用

① 引入封裝好的HTTP工具類
② 聲明HTTP
③ 請求數(shù)據(jù)

import {
  HTTP
} from '../util/http.js'

const http = new HTTP()
// GET
http.request({
      url: '',
      success: (res) => {
        // res 后臺返回的數(shù)據(jù)
      }
})

//POST
http.request({
      url: '',
      method: 'POST',
      data: {
        art_id: '',
        type: ''
      },
      success: (res) => {
         // res 后臺返回的數(shù)據(jù)
      }
})
3. 再封裝

可以根據(jù)具體的業(yè)務(wù)邏輯對HTTP工具進行再一次的封裝滴某,簡化請求的調(diào)用,使得業(yè)務(wù)邏輯更加的清晰滋迈。比如我要獲取圖書信息霎奢,以下是bookModel.js文件代碼,所有和圖書相關(guān)的請求方法都可以封裝在這個文件中

①創(chuàng)建js文件饼灿,比如bookModel.js幕侠,并引入HTTP
②定義類,比如BookModel碍彭,并繼承定義的HTTP類晤硕,方便調(diào)用HTTP請求方法
③獲取對應(yīng)數(shù)據(jù)悼潭,并回調(diào)出去
④導(dǎo)出當(dāng)前類

import {
  HTTP
} from '../util/http.js'

class BookModel extends HTTP {
  // 獲取圖書信息
  getBookInfo(sCallback) {
    this.request({
      url: '',
      method: 'POST',
      data: {
        id: '',
        type: ''
      },
      success: (res) => {
        sCallback(res)
      }
    })
  }

}

export { BookModel }

調(diào)用的時候只需要引入BookModel并聲明,直接調(diào)用getBookInfo即可

import {
  BookModel
} from '../../models/bookModel.js'

let bookModel = new BookModel()

// 獲取圖書信息
bookModel.getBookInfo((res) => {
  // res 獲取到的數(shù)據(jù)
})

二窗骑、Promise鏈?zhǔn)?/h3>

Promise是以另一種方式封裝HTTP請求女责,這種方式可以很好的解決回調(diào)地獄問題,即請求回調(diào)嵌套請求的問題创译,廢話不多說抵知,直接上代碼

1. 封裝

http-p.js文件

class HTTP {

  request({url, data = {}, method = 'GET'}) {
    return new Promise((resolve, reject) => {
      this._request(url, resolve, reject, data, method)
    })
  }

  _request(url, resolve, reject, data, method) {
    wx.request({
      url: '主網(wǎng)址' +url,
      method: method,
      data: data,
      header: {
        'content-type': 'application/json'
      },
      success: (res) => {
        let code = res.data.resp_code.toString()
        if (code == '000000') {
          resolve(res.data)
        }else if (code == '000005') {
          reject()
          this. _showToast('token失效,請重新登錄')
        }else {
          reject()
          let msg = res.data.resp_message
          this._showToast(msg)
        }
      },
      fail: (err) => {
        reject()
        this._showToast('請求出錯软族,請稍后重試')
      }
    })
  }

  _showToast(title) {
    wx.showToast({
      title: title,
      icon: 'none',
      duration: 2000
    })
  }
}

export { HTTP }
2. 再封裝

bookModel.js文件代碼

import {
  HTTP
} from '../util/http-p.js'

class BookModel extends HTTP {

  // 獲取圖書信息1
  getBookInfo1() {
    return this.request({
      url: '',
      method: 'POST',
      data: {
        id: ''
      }
    })
  }
  
  // 獲取圖書信息2
  getBookInfo2() {
    return this.request({
      url: '',
      method: 'POST',
      data: {
        id: ''
      }
    })
  }
}

export { BookModel }
3.調(diào)用
import {
  BookModel
} from '../../models/bookModel.js'

let bookModel = new BookModel()

// 獲取圖書信息1
const info1 = bookModel.getBookInfo1()
const info2 = bookModel.getBookInfo2()
info1.then(res => {
  // res 獲取到的圖書信息1的數(shù)據(jù)
})
info2.then(res => {
  // res 獲取到的圖書信息2的數(shù)據(jù)
})

// 獲取圖書信息1后獲取圖書信息2
Promise.all([info1, info2]).then(res => {
  // res[0] 圖書信息1的數(shù)據(jù)
  // res[1] 圖書信息2的數(shù)據(jù)
})
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末刷喜,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子立砸,更是在濱河造成了極大的恐慌掖疮,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,270評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件颗祝,死亡現(xiàn)場離奇詭異浊闪,居然都是意外死亡,警方通過查閱死者的電腦和手機螺戳,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評論 3 395
  • 文/潘曉璐 我一進店門搁宾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人倔幼,你說我怎么就攤上這事盖腿。” “怎么了损同?”我有些...
    開封第一講書人閱讀 165,630評論 0 356
  • 文/不壞的土叔 我叫張陵翩腐,是天一觀的道長。 經(jīng)常有香客問我膏燃,道長茂卦,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,906評論 1 295
  • 正文 為了忘掉前任组哩,我火速辦了婚禮疙筹,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘禁炒。我一直安慰自己,他們只是感情好霍比,可當(dāng)我...
    茶點故事閱讀 67,928評論 6 392
  • 文/花漫 我一把揭開白布幕袱。 她就那樣靜靜地躺著,像睡著了一般悠瞬。 火紅的嫁衣襯著肌膚如雪们豌。 梳的紋絲不亂的頭發(fā)上涯捻,一...
    開封第一講書人閱讀 51,718評論 1 305
  • 那天,我揣著相機與錄音望迎,去河邊找鬼障癌。 笑死,一個胖子當(dāng)著我的面吹牛辩尊,可吹牛的內(nèi)容都是我干的涛浙。 我是一名探鬼主播,決...
    沈念sama閱讀 40,442評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼摄欲,長吁一口氣:“原來是場噩夢啊……” “哼轿亮!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起胸墙,我...
    開封第一講書人閱讀 39,345評論 0 276
  • 序言:老撾萬榮一對情侶失蹤我注,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后迟隅,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體但骨,經(jīng)...
    沈念sama閱讀 45,802評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,984評論 3 337
  • 正文 我和宋清朗相戀三年智袭,在試婚紗的時候發(fā)現(xiàn)自己被綠了奔缠。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,117評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡补履,死狀恐怖添坊,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情箫锤,我是刑警寧澤贬蛙,帶...
    沈念sama閱讀 35,810評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站谚攒,受9級特大地震影響阳准,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜馏臭,卻給世界環(huán)境...
    茶點故事閱讀 41,462評論 3 331
  • 文/蒙蒙 一野蝇、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧括儒,春花似錦绕沈、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至固逗,卻和暖如春浅蚪,著一層夾襖步出監(jiān)牢的瞬間藕帜,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評論 1 272
  • 我被黑心中介騙來泰國打工惜傲, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留洽故,地道東北人。 一個月前我還...
    沈念sama閱讀 48,377評論 3 373
  • 正文 我出身青樓盗誊,卻偏偏與公主長得像时甚,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子浊伙,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,060評論 2 355

推薦閱讀更多精彩內(nèi)容

  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對...
    cosWriter閱讀 11,103評論 1 32
  • 一撞秋、簡歷準(zhǔn)備 1、個人技能 (1)自定義控件嚣鄙、UI設(shè)計吻贿、常用動畫特效 自定義控件 ①為什么要自定義控件? Andr...
    lucas777閱讀 5,211評論 2 54
  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5哑子? 答:HTML5是最新的HTML標(biāo)準(zhǔn)舅列。 注意:講述HT...
    kismetajun閱讀 27,489評論 1 45
  • 今日記錄:摳嘴皮+提條件 真是要把我氣的吐血,已經(jīng)改正的問題還是會屢屢再犯卧蜓。吃飯拖拉本來已經(jīng)有了顯著的改變...
    等等和姐姐閱讀 154評論 0 0
  • 昨天跟閨蜜去逛街帐要,她突然問了我一個問題,她說你怕你老公出軌嗎弥奸?我一愣榨惠?為什么這么問呢?她說盛霎,我們現(xiàn)在都是四十多...
    青海露珠閱讀 680評論 0 0