一区二区日本_久久久久久久国产精品_无码国模国产在线观看_久久99深爱久久99精品_亚洲一区二区三区四区五区午夜_日本在线观看一区二区

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

本篇文章主要介紹了微信小程序之頁面攔截器的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。愛掏網(wǎng) - it200.com一起跟隨小編過來看看吧

場景

  • 小程序有52個頁面,其中13個頁面無需任何身份,另外39個頁面需要系統(tǒng)角色。愛掏網(wǎng) - it200.com對于這39個頁面,如果微信用戶沒有系統(tǒng)角色,則跳轉到登錄頁。愛掏網(wǎng) - it200.com

  • 是否有系統(tǒng)角色信息需要通過異步請求來獲取。愛掏網(wǎng) - it200.com

需求分析&實現(xiàn)

對需求進行抽象,其實要的就是一個過濾器,對小程序頁面的訪問進行過濾,符合條件的通過,不符合條件進行其他處理。愛掏網(wǎng) - it200.com

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

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

令人憂桑的是,微信小程序并沒有提供針對Page實例的中間件機制。愛掏網(wǎng) - it200.com所以只能從Page實例的生命周期處下手。愛掏網(wǎng) - it200.com

對于onLoad,一個頁面只會調用一次;對于onShow,每次打開頁面(比如小程序從后臺轉到前臺)都會調用一次。愛掏網(wǎng) - it200.com

在onLoad或者onShow鉤子函數(shù)里,對用戶身份進行校驗,通過后則拉取該頁面需要的數(shù)據(jù),否則跳轉到登錄頁。愛掏網(wǎng) - it200.com

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

不過,每個頁面都要這樣寫,重復代碼好多啊,侵入性也強。愛掏網(wǎng) - it200.com不如用裝飾函數(shù)(高大上的說法是裝飾者模式)來包裝一下:

//filter.js
function identityFilter(pageObj){
  if(pageObj.onShow){
    let _onShow = pageObj.onShow;
    pageObj.onShow = function(){
      service.identityCheck(()=>{
        //跳轉到登錄頁
        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ù)如果需要其他攔截,可以在這個文件增加。愛掏網(wǎng) - it200.com然后,在需要用戶身份攔截的小程序頁面代碼里,用filter.identityFilter處理一下就可以了:

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

使用Promise進行優(yōu)化

上面的實現(xiàn)中,每次訪問頁面,都會執(zhí)行一次獲取用戶身份的方法(就是上面代碼里的service. identityCheck )。愛掏網(wǎng) - it200.com其實沒有必要,在小程序啟動的時候獲取一次就行了。愛掏網(wǎng) - it200.com也就是說,放在app.js的onLaunch方法里執(zhí)行。愛掏網(wǎng) - it200.com

每個小程序頁面實例化時,一般也會執(zhí)行異步方法,用來獲取頁面需要的數(shù)據(jù)。愛掏網(wǎng) - it200.com關鍵在于,我們需要保證,頁面的異步方法 必須在 獲取用戶身份的異步請求 之后執(zhí)行。愛掏網(wǎng) - it200.com

毋容置疑,Promise最擅長處理異步請求的執(zhí)行順序了。愛掏網(wǎng) - it200.com主子,快放代碼粗來:

//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(()=>{
        //跳轉到登錄頁
        wx.redirectTo({
          url: "/pages/common/login/login"
        });
      },()=>{
        //獲取頁面實例,防止this劫持
        let currentInstance = getPageInstance();
        _onShow.call(currentInstance);
      });
    }
  }
  return pageObj;
}
登錄后復制

小結

基本實現(xiàn)了小程序頁面的用戶身份攔截器,但是比起laravel的http中間件還是遜色一些:

  • 需要對每個頁面代碼包裝一層。愛掏網(wǎng) - it200.com

  • 即使用戶身份校驗不通過,小程序也并不會阻塞頁面的渲染。愛掏網(wǎng) - it200.com假如獲取用戶身份的異步方法一分鐘才執(zhí)行完,小程序頁面還是會展示出來,一分鐘之后才跳轉到登錄頁。愛掏網(wǎng) - it200.com需要自己增加邏輯,比如在這一分鐘內,頁面展示空白內容。愛掏網(wǎng) - it200.com

以上就是微信小程序開發(fā)頁面攔截器的詳解的詳細內容,更多請關注愛掏網(wǎng) - it200.com其它相關文章!

聲明:所有內容來自互聯(lián)網(wǎng)搜索結果,不保證100%準確性,僅供參考。如若本站內容侵犯了原著者的合法權益,可聯(lián)系我們進行處理。
發(fā)表評論
更多 網(wǎng)友評論0 條評論)
暫無評論

返回頂部

主站蜘蛛池模板: 欧美久久视频 | 希岛爱理在线 | 亚洲男人的天堂网站 | 精品久久久久一区二区国产 | 成人网av| 天天综合网天天综合 | 久久久久久久久久久久亚洲 | 国产91中文 | 欧产日产国产精品视频 | 久久艹免费视频 | 成人二区 | 久久狠狠 | 97精品超碰一区二区三区 | 日日干日日 | 狠狠狠色丁香婷婷综合久久五月 | 九九热这里| 久久精品视频网站 | 免费一区二区三区 | 2018天天干天天操 | 国产精品国产三级国产aⅴ无密码 | 国产精品污www一区二区三区 | 久草在线在线精品观看 | 日本一区二区影视 | 亚洲入口| 男人的天堂一级片 | 亚洲国产成人一区二区 | 免费视频一区二区三区在线观看 | 欧洲妇女成人淫片aaa视频 | 日韩午夜电影 | 国产成人99久久亚洲综合精品 | 婷婷久久精品一区二区 | 久久婷婷av | 久久亚洲精品国产精品紫薇 | 亚洲精品国产成人 | 黄网在线观看 | 91中文在线观看 | 日韩一二三区 | 国产探花| 一级毛片免费看 | 欧美精品二区 | 在线观看视频中文字幕 |