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

目錄
1、背景
2、二次封裝的原因
#3、具體的封裝實作
首頁 微信小程式 小程式開發(fā) 小程式中怎麼對網(wǎng)路請求進行二次封裝

小程式中怎麼對網(wǎng)路請求進行二次封裝

Nov 02, 2021 am 11:16 AM
封裝 小程式 網(wǎng)路請求

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

小程式中怎麼對網(wǎng)路請求進行二次封裝

1、背景

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

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

其中:

  • #url:為請求的後臺介面位址;

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

  • header:設(shè)定請求的header,content-type?預(yù)設(shè)為?application/json,

  • ?success: 為請求成功後的回調(diào),res包含請求成功後回傳的資料。

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

RequestTask | 微信開放文件

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

2、二次封裝的原因

第一點、避免重複程式碼

避免重複程式碼主要體現(xiàn)在以下幾點:

1) 我們公司呼叫後臺接口,除了登入接口外,其它的接口請求都需要在請求頭中加入token,如果不做封裝的情況下,每次呼叫網(wǎng)路請求都需要傳token,很麻煩。

2)在網(wǎng)路請求的時候往往需要給個載入框,提示使用者正在載入.... 如下圖所示:

小程式中怎麼對網(wǎng)路請求進行二次封裝

如果不做封裝,在每個網(wǎng)路要求的地方如果需要彈出載入框,都需要重複寫這一段程式碼:

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

小程式中怎麼對網(wǎng)路請求進行二次封裝

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

小程式中怎麼對網(wǎng)路請求進行二次封裝

第二點、避免回呼地獄

一個頁面如果有多個網(wǎng)路請求,並且請求有一定的順序,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)站去查看,有詳細(xì)的介紹。

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

#3、具體的封裝實作

小程式中怎麼對網(wǎng)路請求進行二次封裝##3、 :

?在utils資料夾下新建了兩個檔案。

1) httpUtils.js

#網(wǎng)路請求的封裝,具體程式碼如下:

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


/**
 * 網(wǎng)絡(luò)請求request
 * obj.data 請求接口需要傳遞的數(shù)據(jù)
 * obj.showLoading 控制是否顯示加載Loading 默認(rèn)為false不顯示
 * obj.contentType 默認(rèn)為 application/json
 * obj.method 請求的方法  默認(rèn)為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,
  }
程式碼中有詳細(xì)的註釋,在這裡就不多做解釋了。

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) 具體呼叫

在index.js 進行了網(wǎng)路請求,具體程式碼如下:
// 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)知識,請造訪:###程式設(shè)計入門###! ! ###

以上是小程式中怎麼對網(wǎng)路請求進行二次封裝的詳細(xì)內(nèi)容。更多資訊請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請聯(lián)絡(luò)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)

熱門話題

Laravel 教程
1597
29
PHP教程
1488
72
實作微信小程式中的卡片翻轉(zhuǎn)特效 實作微信小程式中的卡片翻轉(zhuǎn)特效 Nov 21, 2023 am 10:55 AM

實作微信小程式中的卡片翻轉(zhuǎn)特效在微信小程式中,實現(xiàn)卡片翻轉(zhuǎn)特效是一種常見的動畫效果,可以提升使用者體驗和介面互動的吸引力。以下將具體介紹如何在微信小程式中實現(xiàn)卡片翻轉(zhuǎn)的特效,並提供相關(guān)程式碼範(fàn)例。首先,需要在小程式的頁面佈局檔案中定義兩個卡片元素,一個用於顯示正面內(nèi)容,一個用於顯示背面內(nèi)容,具體範(fàn)例程式碼如下:<!--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ā)布報告,認(rèn)為英偉達Blackwell新平臺產(chǎn)品需求看漲,預(yù)估帶動臺積電2024年CoWoS封裝總產(chǎn)能提升逾150%。英偉達Blackwell新平臺產(chǎn)品包含B系列的GPU,以及整合英偉達自家GraceArmCPU的GB200加速卡等。集邦諮詢確認(rèn)為供應(yīng)鏈目前非??春肎B200,預(yù)估2025年出貨量預(yù)計超過百萬片,在英偉達高階GPU中的佔比達到40-50%。在英偉達計畫下半年交付GB200以及B100等產(chǎn)品,但上游晶圓封裝方面須進一步採用更複

支付寶上線「漢字拾光-生僻字」小程序,用於徵集、補充生僻字庫 支付寶上線「漢字拾光-生僻字」小程序,用於徵集、補充生僻字庫 Oct 31, 2023 pm 09:25 PM

本站10月31日消息,今年5月27日,螞蟻集團宣布啟動“漢字拾光計劃”,最近又迎來新進展:支付寶上線“漢字拾光-生僻字”小程序,用於向社會徵集生僻字,補充生僻字庫,同時提供不同的生僻字輸入體驗,以幫助完善支付寶內(nèi)的生僻字輸入方法。目前,用戶搜尋「漢字拾光」、「生僻字」等關(guān)鍵字就可以進入「生僻字」小程式。在小程式裡,使用者可以提交尚未被系統(tǒng)辨識輸入的生僻字圖片,支付寶工程師確認(rèn)後,將會對字庫進行補錄入。本站注意到,使用者也可以在小程式體驗最新的拆字輸入法,這項輸入法針對讀音不明確的生僻字設(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)換,需要具體程式碼範(fàn)例近年來,隨著行動網(wǎng)路的發(fā)展和智慧型手機的普及,小程式和H5成為了不可或缺的應(yīng)用形式。而uniapp作為一個跨平臺的開發(fā)框架,可以在一套程式碼的基礎(chǔ)上,快速實現(xiàn)小程式和H5的轉(zhuǎn)換,大大提高了開發(fā)效率。本文將介紹uniapp如何實現(xiàn)小程式和H5的快速轉(zhuǎn)換,並給出具體的程式碼範(fà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++ 函式如何透過封裝程式碼來提高 GUI 開發(fā)的效率? C++ 函式如何透過封裝程式碼來提高 GUI 開發(fā)的效率? Apr 25, 2024 pm 12:27 PM

透過封裝程式碼,C++函數(shù)可以提高GUI開發(fā)效率:程式碼封裝:函數(shù)將程式碼分組到獨立單元,使程式碼易於理解和維護??芍匮}使用性:函數(shù)可建立通用功能供應(yīng)用程式中重複使用,減少重複編寫和錯誤。簡潔程式碼:封裝程式碼讓主邏輯簡潔,方便閱讀和除錯。

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

PHP中的封裝技術(shù)及應(yīng)用封裝是物件導(dǎo)向程式設(shè)計中的重要概念,它指的是將資料和資料的操作封裝在一起,以便提供對外部程式的統(tǒng)一存取介面。在PHP中,封裝可以透過存取控制修飾符和類別的定義來實現(xiàn)。本文將介紹PHP中的封裝技術(shù)及其應(yīng)用場景,並提供一些具體的程式碼範(fàn)例。一、封裝的存取控制修飾符在PHP中,封裝主要透過存取控制修飾符來實現(xiàn)。 PHP提供了三個存取控制修飾符,

See all articles