国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

首頁 微信小程式 小程式開發(fā) 微信小程式開發(fā)頁面攔截器的詳解

微信小程式開發(fā)頁面攔截器的詳解

May 29, 2018 am 09:51 AM
小程式 程式開發(fā) 詳解

這篇文章主要介紹了微信小程式之頁攔截器的範(fàn)例程式碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟著小編過來看看吧

場景

  • #小程式有52個頁面,其中13個頁面無需任何身份,另外39個頁面需要係統(tǒng)角色。對於這39個頁面,如果微信使用者沒有系統(tǒng)角色,則跳到登入頁。

  • 是否有系統(tǒng)角色資訊需要透過非同步請求來取得。

需求分析&實作

對需求進(jìn)行抽象,其實要的就是一個過濾器,對小程式頁面的訪問進(jìn)行過濾,符合條件的通過,不符合條件進(jìn)行其他處理。

使用過php的laravel框架的童鞋,肯定一下子就聯(lián)想到了laravel框架的http中間件:

HTTP 中間件提供一個方便的機制來過濾進(jìn)入應(yīng)用程序的HTTP 請求,例如,Laravel 預(yù)設(shè)包含了一個中間件來檢驗用戶身份驗證,如果用戶沒有經(jīng)過身份驗證,中間件會將用戶導(dǎo)向登錄頁面,然而,如果用戶通過身份驗證,中間件將會允許這個請求進(jìn)一步繼續(xù)前進(jìn)。當(dāng)然,除了身份驗證之外,中間件也可以被用來執(zhí)行各式各樣的任務(wù),CORS 中間件負(fù)責(zé)替所有即將離開程序的響應(yīng)加入適當(dāng)?shù)捻憫?yīng)頭,一個日誌中間件可以記錄所有傳入應(yīng)用程序的請求。

令人憂桑的是,微信小程式並沒有提供針對Page實例的中間件機制。所以只能從Page實例的生命週期下手。

對於onLoad,一個頁面只會呼叫一次;對於onShow,每次開啟頁面(例如小程式從後臺轉(zhuǎn)到前臺)都會呼叫一次。

在onLoad或onShow鉤子函數(shù)裡,對使用者身分進(jìn)行校驗,透過後則拉取該頁面所需的數(shù)據(jù),否則跳到登入頁。

//orderDetail.js
onShow: function () {
  let that = this;
  //身份校驗
  service.identityCheck(() => {
     //跳轉(zhuǎn)到登錄頁
     wx.redirectTo({
      url: "/pages/common/login/login"
     });
    }, () => {  
     //獲取頁面數(shù)據(jù)等等   
     that.getDetail(this.orderId);
     ...
    }
  );
 },

不過,每個頁面都要這樣寫,重複程式碼好多啊,侵入性也強。不如用裝飾函數(shù)(高大上的說法是裝飾者模式)來包裝一下:

//filter.js
function identityFilter(pageObj){
  if(pageObj.onShow){
    let _onShow = pageObj.onShow;
    pageObj.onShow = function(){
      service.identityCheck(()=>{
        //跳轉(zhuǎn)到登錄頁
        wx.redirectTo({
          url: "/pages/common/login/login"
        });
      },()=>{
        //獲取頁面實例,防止this劫持
        let currentInstance = getPageInstance();
        _onShow.call(currentInstance);
      });
    }
  }
  return pageObj;
}

function getPageInstance(){
  var pages = getCurrentPages();
  return pages[pages.length - 1];
}

exports.identityFilter = identityFilter;

filter.js用以提供過濾器方法,除了現(xiàn)有的用戶身份攔截,後續(xù)如果需要其他攔截,可以在這個檔案增加。然後,在需要使用者身分?jǐn)r截的小程式頁面程式碼裡,用filter.identityFilter處理一下就可以了:

//orderDetail.js
let filter = require('filter.js');
Page(filter.identityFilter({
  ...
  onShow: function () {
    //獲取頁面數(shù)據(jù)等等
    this.getDetail(this.orderId);
    //...
  },
  ...
}));

使用Promise進(jìn)行最佳化

#上面的實作中,每次造訪頁面,都會執(zhí)行一次取得使用者身分的方法(就是上面程式碼裡的service. identityCheck )。其實沒有必要,在小程式啟動的時候取得一次就行了。也就是說,放在app.js的onLaunch方法裡執(zhí)行。

每個小程式頁面實例化時,一般也會執(zhí)行非同步方法,用來取得頁面所需的資料。關(guān)鍵在於,我們需要保證,頁面的非同步方法 必須在 取得使用者身分的非同步請求 之後執(zhí)行。

毋容置疑,Promise最擅長處理非同步請求的執(zhí)行順序了。主子,快放程式碼粗來:

//app.js
App({
  onLaunch:function(){
    let p = new Promise(function(resolve,reject){
      service.identityCheck(resolve,reject);
    });
    this.globalData.promise = p; 
  },
  ...
  globalData: {
    promise:null,
  }  
});
//filter.js
const appData = getApp().globalData;
function identityFilter(pageObj){
  if(pageObj.onShow){
    let _onShow = pageObj.onShow;
    pageObj.onShow = function(){
      //改動點
      appData.promise.then(()=>{
        //跳轉(zhuǎn)到登錄頁
        wx.redirectTo({
          url: "/pages/common/login/login"
        });
      },()=>{
        //獲取頁面實例,防止this劫持
        let currentInstance = getPageInstance();
        _onShow.call(currentInstance);
      });
    }
  }
  return pageObj;
}

小結(jié)

基本上實作了小程式頁面的使用者身分?jǐn)r截器,但是比起laravel的http中間件還是遜色一些:

  • 需要對每個頁面程式碼包裝一層。

  • 即使使用者身分校驗不通過,小程式也不會阻塞頁面的渲染。若要取得使用者身分的非同步方法一分鐘才執(zhí)行完,小程式頁面還是會展示出來,一分鐘之後才跳到登入頁。需要自己增加邏輯,例如在這一分鐘內(nèi),頁面展示空白內(nèi)容。

#

以上是微信小程式開發(fā)頁面攔截器的詳解的詳細(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)

Win11管理員權(quán)限取得詳解 Win11管理員權(quán)限取得詳解 Mar 08, 2024 pm 03:06 PM

Windows作業(yè)系統(tǒng)是全球最受歡迎的作業(yè)系統(tǒng)之一,其新版本W(wǎng)in11備受矚目。在Win11系統(tǒng)中,管理員權(quán)限的取得是一個重要的操作,管理員權(quán)限可以讓使用者對系統(tǒng)進(jìn)行更多的操作和設(shè)定。本文將詳細(xì)介紹在Win11系統(tǒng)中如何取得管理員權(quán)限,以及如何有效地管理權(quán)限。在Win11系統(tǒng)中,管理員權(quán)限分為本機管理員和網(wǎng)域管理員兩種。本機管理員是指具有對本機電腦的完全管理權(quán)限

C++中的眾數(shù)函數(shù)詳解 C++中的眾數(shù)函數(shù)詳解 Nov 18, 2023 pm 03:08 PM

C++中的眾數(shù)函數(shù)詳解在統(tǒng)計學(xué)中,眾數(shù)指的是一組資料中出現(xiàn)次數(shù)最多的數(shù)值。在C++語言中,我們可以透過寫一個眾數(shù)函數(shù)來找出任意一組資料中的眾數(shù)。眾數(shù)函數(shù)的實作可以採用多種不同的方法,以下將詳細(xì)介紹其中兩種常用的方法。第一種方法是使用哈希表來統(tǒng)計每個數(shù)字出現(xiàn)的次數(shù)。首先,我們需要定義一個哈希表,將每個數(shù)字作為鍵,出現(xiàn)次數(shù)作為值。然後,對於給定的資料集,我們遍

實作微信小程式中的卡片翻轉(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

Oracle SQL中的除法運算詳解 Oracle SQL中的除法運算詳解 Mar 10, 2024 am 09:51 AM

OracleSQL中的除法運算詳解在OracleSQL中,除法運算是一種常見且重要的數(shù)學(xué)運算運算,用來計算兩個數(shù)相除的結(jié)果。除法在資料庫查詢中經(jīng)常用到,因此了解OracleSQL中的除法運算及其用法是資料庫開發(fā)人員必備的技能之一。本文將詳細(xì)討論OracleSQL中除法運算的相關(guān)知識,並提供具體的程式碼範(fàn)例供讀者參考。一、OracleSQL中的除法運算

C++中的取餘函式詳解 C++中的取餘函式詳解 Nov 18, 2023 pm 02:41 PM

C++中的取餘函數(shù)詳解在C++中,取餘運算子(%)用於計算兩個數(shù)相除的餘數(shù)。它是一種二元運算符,其運算元可以是任何整數(shù)型別(包括char、short、int、long等),也可以是浮點數(shù)型別(如float、double)。取餘運算子傳回的結(jié)果與被除數(shù)的符號相同。例如,對於整數(shù)的取餘運算,我們可以使用以下程式碼來實作:inta=10;intb=3;

numpy版本查詢方法詳解 numpy版本查詢方法詳解 Jan 19, 2024 am 08:20 AM

Numpy是一款Python科學(xué)計算庫,提供了豐富的陣列操作函數(shù)與工具。升級Numpy版本時需要查詢目前版本以確保相容性,本文將詳細(xì)介紹Numpy版本查詢的方法,並提供具體的程式碼範(fàn)例。方法一:使用Python程式碼查詢Numpy版本使用Python程式碼可以輕鬆查詢Numpy的版本,以下是實作方法和範(fàn)例程式碼:importnumpyasnpprint(np

PHP模運算子的作用及用法詳解 PHP模運算子的作用及用法詳解 Mar 19, 2024 pm 04:33 PM

PHP中的模運算子(%)是用來取得兩個數(shù)值相除的餘數(shù)的。在本文中,我們將詳細(xì)討論模運算子的作用及用法,並提供具體的程式碼範(fàn)例來幫助讀者更好地理解。 1.模運算子的作用在數(shù)學(xué)中,當(dāng)我們將一個整數(shù)除以另一個整數(shù)時,就會得到一個商和一個餘數(shù)。例如,當(dāng)我們將10除以3時,商數(shù)為3,餘數(shù)為1。模運算子就是用來取得這個餘數(shù)的。 2.模運算子的用法在PHP中,使用%符號來表示模

linux系統(tǒng)呼叫system()函數(shù)詳解 linux系統(tǒng)呼叫system()函數(shù)詳解 Feb 22, 2024 pm 08:21 PM

Linux系統(tǒng)呼叫system()函數(shù)詳解系統(tǒng)呼叫是Linux作業(yè)系統(tǒng)中非常重要的一部分,它提供了一種與系統(tǒng)核心互動的方式。其中,system()函數(shù)是常用的系統(tǒng)呼叫函數(shù)之一。本文將詳細(xì)介紹system()函數(shù)的使用方法,並提供對應(yīng)的程式碼範(fàn)例。系統(tǒng)呼叫的基本概念系統(tǒng)呼叫是使用者程式與作業(yè)系統(tǒng)核心互動的一種方式。使用者程式透過呼叫系統(tǒng)呼叫函數(shù)來請求作業(yè)系統(tǒng)

See all articles