亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

目錄
1、背景
2、二次封裝的原因
3、具體的封裝實現(xiàn)
首頁 微信小程序 小程序開發(fā) 小程序中怎么對網(wǎng)絡(luò)請求進行二次封裝

小程序中怎么對網(wǎng)絡(luò)請求進行二次封裝

Nov 02, 2021 am 11:16 AM
封裝 小程序 網(wǎng)絡(luò)請求

本篇文章給大家介紹一下微信小程序開發(fā)中的網(wǎng)絡(luò)請求封裝,聊聊二次封裝的原因,具體的封裝實現(xiàn),希望對大家有所幫助!

小程序中怎么對網(wǎng)絡(luò)請求進行二次封裝

1、背景

在做微信小程序開發(fā)的時候難免會涉及到網(wǎng)絡(luò)請求操作,小程序提供的原生網(wǎng)絡(luò)請求的api如下所示:

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

其中:

  • url: 為請求的后臺接口地址;

  • data: 為請求接口需要攜帶的參數(shù);

  • header:設(shè)置請求的 header,content-type 默認為 application/json,

  • success: 為請求成功后的回調(diào),res包含請求成功后返回的數(shù)據(jù)。

更多關(guān)于 wx.request的用法可以查看官方介紹。

RequestTask | 微信開放文檔

那既然官方已經(jīng)提供有api,為什么還需要進行二次封裝呢?

2、二次封裝的原因

第一點、避免重復(fù)代碼

避免重復(fù)代碼主要體現(xiàn)在以下幾點:

1) 我們公司調(diào)用后臺接口,除了登錄接口外,其它的接口請求都需要在請求頭中加入token,如果不做封裝的情況下,每次調(diào)用網(wǎng)絡(luò)請求都需要傳token,很麻煩。

2)在網(wǎng)絡(luò)請求的時候往往需要給個加載框,提示用戶正在加載.... 如下圖所示:

1.png

如果不做封裝,在每個網(wǎng)絡(luò)請求的地方如果需要彈出加載框,都需要重復(fù)寫這一段代碼:

請求開始的時候,顯示加載框。

2.png

請求結(jié)束的時候,隱藏加載框:

3.png

第二點、避免回調(diào)地獄

一個頁面如果有多個網(wǎng)絡(luò)請求,并且請求有一定的順序,wx.request 是異步操作,那么最直接的結(jié)果就如下所示代碼:

onLoad: function () {
    wx.request({
      url: 'https://test.com/api/test01',
      success:res=>{
        wx.request({
          url: 'https://test.com/api/test02',
          success: res=>{
            wx.request({
              url: 'https://test.com/api/test03',
              success: res=>{
                testDataList: res.content
              }
            })
          }
        })
      }
    })
  },

是不是很像俄羅斯套娃。

為了避免這種寫法,當(dāng)然進行封裝了,在這個地方采用了Promise。

關(guān)于Prolise的介紹可以到廖雪峰的官方網(wǎng)站去查看,有詳細的介紹。

https://www.liaoxuefeng.com/wiki/1022910821149312/1023024413276544

3、具體的封裝實現(xiàn)

工程結(jié)構(gòu):

4.png

在utils文件夾下新建了兩個文件。

1) httpUtils.js

網(wǎng)絡(luò)請求的封裝,具體代碼如下:

const ui = require('./ui');
const BASE_URL = 'https://www.wanandroid.com'


/**
 * 網(wǎng)絡(luò)請求request
 * obj.data 請求接口需要傳遞的數(shù)據(jù)
 * obj.showLoading 控制是否顯示加載Loading 默認為false不顯示
 * obj.contentType 默認為 application/json
 * obj.method 請求的方法  默認為GET
 * obj.url 請求的接口路徑 
 * obj.message 加載數(shù)據(jù)提示語
 */
function request(obj) {
    return new Promise(function(resolve, reject) {
      if(obj.showLoading){
        ui.showLoading(obj.message? obj.message : '加載中...');
      }
      var data = {};
      if(obj.data) {
        data = obj.data;
      }
      var contentType = 'application/json';
      if(obj.contentType){
        contentType = obj.contentType;
      } 
  
      var method = 'GET';
      if(obj.method){
        method = obj.method;
      }
  
      wx.request({
        url: BASE_URL + obj.url,
        data: data,
        method: method,
        //添加請求頭
        header: {
          'Content-Type': contentType ,
          'token': wx.getStorageSync('token') //獲取保存的token
        },
        //請求成功
        success: function(res) {
          console.log('===============================================================================================')
          console.log('==    接口地址:' + obj.url);
          console.log('==    接口參數(shù):' + JSON.stringify(data));
          console.log('==    請求類型:' + method);
          console.log("==    接口狀態(tài):" + res.statusCode);
          console.log("==    接口數(shù)據(jù):" + JSON.stringify(res.data));
          console.log('===============================================================================================')
          if (res.statusCode == 200) {
            resolve(res);
          } else if (res.statusCode == 401) {//授權(quán)失效
            reject("登錄已過期");
            jumpToLogin();//跳轉(zhuǎn)到登錄頁
          } else {
            //請求失敗
            reject("請求失?。?quot; + res.statusCode)
          }
        },
        fail: function(err) {
          //服務(wù)器連接異常
          console.log('===============================================================================================')
          console.log('==    接口地址:' + url)
          console.log('==    接口參數(shù):' + JSON.stringify(data))
          console.log('==    請求類型:' + method)
          console.log("==    服務(wù)器連接異常")
          console.log('===============================================================================================')
          reject("服務(wù)器連接異常,請檢查網(wǎng)絡(luò)再試");
        },
        complete: function() {
          ui.hideLoading();
        }
      })
    });
  }
  

  //跳轉(zhuǎn)到登錄頁
  function jumpToLogin(){
    wx.reLaunch({
      url: '/pages/login/login',
    })
  }
  
  module.exports = {
    request,
  }

代碼中有詳細的注釋,在這里就不多做解釋了。

2) ui.js

主要是對wx UI操作的一些簡單封裝,代碼如下:

export const showToast = function(content,duration) {
    if(!duration) duration = 2000
    wx.showToast({
        title: content,
        icon: 'none',
        duration: duration,
    })
  }
  
  var isShowLoading = false
  export const showLoading = function(title) {
    if(isShowLoading) return
    wx.showLoading({
        title: title?title:'',
        mask:true,
        success:()=>{
            isShowLoading = true
        }
    })
  }
  
  export const hideLoading = function() {
    if(!isShowLoading) return
    isShowLoading = false
    wx.hideLoading()
  }

3) 具體調(diào)用

在index.js 進行了網(wǎng)絡(luò)請求,具體代碼如下:

// index.js
const httpUtils = require('../../utils/httpUtils')
const ui = require('../../utils/ui')

Page({
  data: {
    str:null,
  },

  onLoad() {
  },

  //獲取接口數(shù)據(jù)
  getNetInfo(){
    let obj = {
      method: "POST",
      showLoading: true,
      url:`/user/register?username=pppooo11&password=pppooo&repassword=pppooo`,
      message:"正在注冊..."
    }
    httpUtils.request(obj).then(res=>{
      this.setData({
        str:JSON.stringify(res)
      })
      ui.showToast(res.data.errorMsg)
    }).catch(err=>{
      console.log('ERROR')
    });
  }
})

好了,到這里也就結(jié)束了,如果上面的內(nèi)容對你有所幫助不要忘記點個贊喲。

代碼已經(jīng)上傳到了github上面,感興趣的可以點擊下載。

https://github.com/YMAndroid/NetWorkDemo

更多編程相關(guān)知識,請訪問:編程入門??!

以上是小程序中怎么對網(wǎng)絡(luò)請求進行二次封裝的詳細內(nèi)容。更多信息請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本站聲明
本文內(nèi)容由網(wǎng)友自發(fā)貢獻,版權(quán)歸原作者所有,本站不承擔(dān)相應(yīng)法律責(zé)任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請聯(lián)系admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

人工智能驅(qū)動的應(yīng)用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用于從照片中去除衣服的在線人工智能工具。

Clothoff.io

Clothoff.io

AI脫衣機

Video Face Swap

Video Face Swap

使用我們完全免費的人工智能換臉工具輕松在任何視頻中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的代碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

功能強大的PHP集成開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級代碼編輯軟件(SublimeText3)

實現(xiàn)微信小程序中的卡片翻轉(zhuǎn)特效 實現(xiàn)微信小程序中的卡片翻轉(zhuǎn)特效 Nov 21, 2023 am 10:55 AM

實現(xiàn)微信小程序中的卡片翻轉(zhuǎn)特效在微信小程序中,實現(xiàn)卡片翻轉(zhuǎn)特效是一種常見的動畫效果,可以提升用戶體驗和界面交互的吸引力。下面將具體介紹如何在微信小程序中實現(xiàn)卡片翻轉(zhuǎn)的特效,并提供相關(guān)代碼示例。首先,需要在小程序的頁面布局文件中定義兩個卡片元素,一個用于顯示正面內(nèi)容,一個用于顯示背面內(nèi)容,具體示例代碼如下:<!--index.wxml-->&l

集邦咨詢:英偉達 Blackwell 平臺產(chǎn)品帶動臺積電今年 CoWoS 產(chǎn)能提高 150% 集邦咨詢:英偉達 Blackwell 平臺產(chǎn)品帶動臺積電今年 CoWoS 產(chǎn)能提高 150% Apr 17, 2024 pm 08:00 PM

本站4月17日消息,集邦咨詢(TrendForce)近日發(fā)布報告,認為英偉達Blackwell新平臺產(chǎn)品需求看漲,預(yù)估帶動臺積電2024年CoWoS封裝總產(chǎn)能提升逾150%。英偉達Blackwell新平臺產(chǎn)品包括B系列的GPU,以及整合英偉達自家GraceArmCPU的GB200加速卡等。集邦咨詢確認為供應(yīng)鏈當(dāng)前非??春肎B200,預(yù)估2025年出貨量有望超過百萬片,在英偉達高端GPU中的占比達到40-50%。在英偉達計劃下半年交付GB200以及B100等產(chǎn)品,但上游晶圓封裝方面須進一步采用更復(fù)

支付寶上線'漢字拾光-生僻字”小程序,用于征集、補充生僻字庫 支付寶上線'漢字拾光-生僻字”小程序,用于征集、補充生僻字庫 Oct 31, 2023 pm 09:25 PM

本站10月31日消息,今年5月27日,螞蟻集團宣布啟動“漢字拾光計劃”,最近又迎來新進展:支付寶上線“漢字拾光-生僻字”小程序,用于向社會征集生僻字,補充生僻字庫,同時提供不同的生僻字輸入體驗,以幫助完善支付寶內(nèi)的生僻字輸入方法。目前,用戶搜索“漢字拾光”、“生僻字”等關(guān)鍵詞就可以進入“生僻字”小程序。在小程序里,用戶可以提交尚未被系統(tǒng)識別錄入的生僻字圖片,支付寶工程師在確認后,將會對字庫進行補錄入。本站注意到,用戶還可以在小程序體驗最新的拆字輸入法,這一輸入法針對讀音不明確的生僻字設(shè)計。用戶拆

uniapp如何實現(xiàn)小程序和H5的快速轉(zhuǎn)換 uniapp如何實現(xiàn)小程序和H5的快速轉(zhuǎn)換 Oct 20, 2023 pm 02:12 PM

uniapp如何實現(xiàn)小程序和H5的快速轉(zhuǎn)換,需要具體代碼示例近年來,隨著移動互聯(lián)網(wǎng)的發(fā)展和智能手機的普及,小程序和H5成為了不可或缺的應(yīng)用形式。而uniapp作為一個跨平臺的開發(fā)框架,可以在一套代碼的基礎(chǔ)上,快速實現(xiàn)小程序和H5的轉(zhuǎn)換,大大提高了開發(fā)效率。本文將介紹uniapp如何實現(xiàn)小程序和H5的快速轉(zhuǎn)換,并給出具體的代碼示例。一、uniapp簡介unia

AMD 'Strix Halo” FP11 封裝尺寸曝光:和英特爾 LGA1700 相當(dāng),比 Phoenix 大 60% AMD 'Strix Halo” FP11 封裝尺寸曝光:和英特爾 LGA1700 相當(dāng),比 Phoenix 大 60% Jul 18, 2024 am 02:04 AM

本站7月9日消息,AMDZen5架構(gòu)“Strix”系列處理器會有兩種封裝方案,其中較小的StrixPoint將采用FP8封裝,而StrixHalo將會采用FP11封裝。圖源:videocardz消息源@Olrak29_最新曝料稱StrixHalo的FP11封裝尺寸為37.5mm*45mm(1687平方毫米),和英特爾AlderLake、RaptorLakeCPU的LGA-1700封裝尺寸相同。AMD最新的PhoenixAPU采用FP8封裝方案,尺寸為25*40mm,這意味著StrixHalo的F

微信小程序怎么弄會員 微信小程序怎么弄會員 May 07, 2024 am 10:24 AM

1、打開微信小程序,進入對應(yīng)的小程序頁面。2、在小程序頁面中查找會員相關(guān)入口,通常會員入口在底部導(dǎo)航欄或個人中心等位置。3、點擊會員入口,進入會員申請頁面。4、在會員申請頁面,填寫相關(guān)信息,如手機號碼、姓名等,完成信息填寫后,提交申請。5、小程序方會對會員申請進行審核,審核通過后,用戶即可成為微信小程序會員。6、作為會員,用戶將享有更多的會員權(quán)益,如積分、優(yōu)惠券、會員專屬活動等

C++ 函數(shù)如何通過封裝代碼來提高 GUI 開發(fā)的效率? C++ 函數(shù)如何通過封裝代碼來提高 GUI 開發(fā)的效率? Apr 25, 2024 pm 12:27 PM

通過封裝代碼,C++函數(shù)可以提高GUI開發(fā)效率:代碼封裝:函數(shù)將代碼分組到獨立單元,使代碼易于理解和維護??芍赜眯裕汉瘮?shù)可創(chuàng)建通用功能供應(yīng)用程序中重復(fù)使用,減少重復(fù)編寫和錯誤。簡潔代碼:封裝代碼使主邏輯簡潔,便于閱讀和調(diào)試。

PHP中的封裝技術(shù)及應(yīng)用 PHP中的封裝技術(shù)及應(yīng)用 Oct 12, 2023 pm 01:43 PM

PHP中的封裝技術(shù)及應(yīng)用封裝是面向?qū)ο缶幊讨械囊粋€重要概念,它指的是將數(shù)據(jù)和對數(shù)據(jù)的操作封裝在一起,以便提供對外部程序的統(tǒng)一訪問接口。在PHP中,封裝可以通過訪問控制修飾符和類的定義來實現(xiàn)。本文將介紹PHP中的封裝技術(shù)及其應(yīng)用場景,并提供一些具體的代碼示例。一、封裝的訪問控制修飾符在PHP中,封裝主要通過訪問控制修飾符來實現(xiàn)。PHP提供了三個訪問控制修飾符,

See all articles