微信小程序request請求的封裝

1鳖目,前言


在開發(fā)微信小程序的過程中,避免不了和服務(wù)端請求數(shù)據(jù)缤弦,微信小程序給我們提供了wx.request這個API领迈,調(diào)用方法如下

wx.request({
  url: 'www.baidu.com', //僅為示例,并非真實的接口地址
  data: {
    x: '',
    y: ''
  },
  header: {
    'content-type': 'application/json' // 默認值
  },
  success (res) {
    console.log(res.data)
  }
});

作為一個合格的前端開發(fā)碍沐,為了代碼質(zhì)量和優(yōu)雅度(其實是因為懶)狸捅,避免不了封裝一些重復(fù)代碼和功能,來使開發(fā)過程更加酣暢淋漓累提。

2尘喝,實現(xiàn)思路


項目中,wx.request的很多參數(shù)都是固定的斋陪,只需要改變data的值朽褪,而一般我們的邏輯處理都是在wx.request的回調(diào)successfailcomplete中操作的鳍贾,并且有部分邏輯也是相同的鞍匾,(比如判斷接口返回數(shù)據(jù)是否成功,根據(jù)成功或失敗顯示不同的提示框等等)骑科,所以博主在這邊用了Promise來做了一個鏈式調(diào)用封裝橡淑,少去了大部分重復(fù)語句。

3咆爽,實現(xiàn)過程


首先我們需要創(chuàng)建一個公共的requestFn.js文件梁棠,在這個文件中寫我們的wx.request的封裝,然后還需要創(chuàng)建一個公共的Api.js文件斗埂,這個里面存放我們的接口地址和自定義的function符糊,最后,在微信小程序根目錄下的app.js中找到globalData呛凶,在里面寫上項目常用的請求域名男娄,具體的如下圖。

目錄結(jié)構(gòu)

目錄結(jié)構(gòu)

app.js

BaseURL

3.1,request的封裝


requestFn.js中模闲,我們要做到的是創(chuàng)建一個function建瘫,在里面統(tǒng)一處理wx.request需要的參數(shù)和返回值,還有請求過程中的Loading提示尸折,Toast提示啰脚,然后通過module.exports將這個function暴露出去,完整代碼如下实夹。

const app = getApp();
const baseURL = app.globalData.baseURL;
const FN = require('../publicFn/public');

const Request = (options) =>{
  return new Promise((resolve, reject) => {
    FN.Loading(1);
    wx.request({
      url: baseURL + options.url || '',
      data: options.data || {},
      method: options.method || 'POST',
      header:{'content-type': "application/x-www-form-urlencoded"},
      responseType:options.responseType || "",
      timeout:15000,
      success (res) {
        FN.LoadingOff();
        if(res.statusCode === 200){
          if(res.data.status === "y"){
            resolve(res.data);
          }else{
            FN.Toast(res.data.info);
          };
        }else{
          FN.Toast(res.errMsg);
        };
      },
      fail (res) {
        FN.Toast("網(wǎng)絡(luò)開小差了");
        reject(res);
      }
    })
  })
};

module.exports = {
  Request
};

其中的FN橄浓,FN.Toast還有FN.Loading是博主自己二次封裝的一些微信小程序API,可以參考博主的另一篇文章:微信小程序API交互的自定義封裝

3.2亮航,api的封裝


request已經(jīng)封裝好了荸实,下面就是將項目需要的請求接口,還有各個模塊的數(shù)據(jù)請求方法定義一下缴淋,統(tǒng)一放在api.js中泪勒,方便維護(ps:如果你的模塊非常多,可以按模塊建立不同的api.js宴猾,按需引入)圆存。

api.js

詳細代碼如下

const requestFn = require('../requestFn/requestFn');

const API = {
  banner:"/web/getBanner.am",//輪播圖
};

const HTTP = {
  /**
  * banner
  * @param {String} userId - 用戶ID
  * @param {String} appClientTypeCode - 設(shè)備端類型DICT_APP_CLIENT_TYPE_CODE_ANDROID(安卓DICT_APP_CLIENT_TYPE_CODE_IOS(蘋果)
  */
  banner(userId, appClientTypeCode){
    return requestFn.Request({
      url:API.banner,
      data:{
        userId:userId,
        appClientTypeCode:appClientTypeCode,
      }
    })
  },
}

module.exports =  HTTP;

4,實際使用


在這幾個步驟之后仇哆,我們的一個request的封裝就完成了沦辙,接下來就是實際應(yīng)用了,調(diào)用方法如下讹剔。

1油讯,在我們的頁面對應(yīng)的js文件頭部先要引入我們對應(yīng)的api.js

import  HTTP  from "../../requestFn/Api";

2延欠,在Page對象中定義方法

// 獲取banner圖
getBanner () {
    let userId = null;
    if(app.globalData.userMsg !== null && app.globalData.userMsg.userId) userId = app.globalData.userMsg.userId;
    let system = app.globalData.systemInfo.system;
    let type = "DICT_APP_CLIENT_TYPE_CODE_IOS";
    if(system){
      if(!~system.indexOf("iOS")) type = "DICT_APP_CLIENT_TYPE_CODE_ANDROID";
    };
    HTTP.banner(userId, type)
    .then(res => {
        this.setData({
            bannerList:res.infoObject
        });
    });
 }

以上就是全部內(nèi)容陌兑,如有寫的不對的,歡迎指出由捎。


如果看了覺得有幫助的兔综,我是@上進的鵬多多,歡迎 點贊 關(guān)注 評論狞玛;
END

往期文章

個人主頁

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
禁止轉(zhuǎn)載软驰,如需轉(zhuǎn)載請通過簡信或評論聯(lián)系作者。
  • 序言:七十年代末心肪,一起剝皮案震驚了整個濱河市锭亏,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌硬鞍,老刑警劉巖慧瘤,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件戴已,死亡現(xiàn)場離奇詭異,居然都是意外死亡锅减,警方通過查閱死者的電腦和手機恭陡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來上煤,“玉大人,你說我怎么就攤上這事著淆〗俸荩” “怎么了?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵永部,是天一觀的道長独泞。 經(jīng)常有香客問我,道長苔埋,這世上最難降的妖魔是什么懦砂? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮组橄,結(jié)果婚禮上荞膘,老公的妹妹穿的比我還像新娘。我一直安慰自己玉工,他們只是感情好羽资,可當(dāng)我...
    茶點故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著遵班,像睡著了一般屠升。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上狭郑,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天腹暖,我揣著相機與錄音,去河邊找鬼翰萨。 笑死脏答,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的亩鬼。 我是一名探鬼主播以蕴,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼辛孵!你這毒婦竟也來了丛肮?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤魄缚,失蹤者是張志新(化名)和其女友劉穎宝与,沒想到半個月后焚廊,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡习劫,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年咆瘟,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片诽里。...
    茶點故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡袒餐,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出谤狡,到底是詐尸還是另有隱情灸眼,我是刑警寧澤,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布墓懂,位于F島的核電站焰宣,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏捕仔。R本人自食惡果不足惜匕积,卻給世界環(huán)境...
    茶點故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望榜跌。 院中可真熱鬧闪唆,春花似錦、人聲如沸钓葫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽瓤逼。三九已至笼吟,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間霸旗,已是汗流浹背贷帮。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留诱告,地道東北人撵枢。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像精居,于是被迫代替她去往敵國和親锄禽。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,979評論 2 355

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