簡體   English   中英

如何在Hapi.js的server.cache()中使用generateFunc?

[英]How to use generateFunc in server.cache() in Hapi.js?

如下圖所示,如何使用generateFunc?

server.cache({
    expiresIn: 1000*60*60,
    segment: 'test',
    generateFunc: function(key,next){}
});

我知道generateFunc用於生成一個新的緩存項,如果在調用get()時未在緩存中找到一個緩存項-直接從api文檔開始。 但是,我仍然不確定如何將get()與generateFunc()結合使用

  • 如果我將get()與generateFunc()一起使用,則是get的回調generateFunc的回調(名為next())嗎?
  • 如果我在server.cache中定義了expiresIn,是否必須在get的回調和generateFunc的回調中定義ttl?
  • 仍然在generateFunc的回調(next())中使用set方法來緩存項目嗎?
  • 如果我在類對象中使用以下內容,如何在generateFunc中從構造函數中引用類變量?

     class Test { constructor(){ this.testVar = 'hello'; } register(server) { this.server = server; this.testCache = server.cache({ expiresIn: 1000*60*60, segment: 'test', generateFunc: function(key,next){} }); } } 

我不明白流程。 我需要一個帶有說明的簡單示例大綱,但是找不到任何好的資源。

從文檔中:

generateFunc (id,next)-如果在調用get()時在緩存中未找到新的緩存項,則該函數用於生成新的緩存項。

  • id-提供給get()方法的id字符串或對象。
  • 未來 -當新項目與簽名功能(ERR,值,TTL),其中返回調用的方法:
    • err-錯誤條件。
    • -產生新的價值。
    • ttl-緩存ttl值(以毫秒為單位)。 設置為0以跳過存儲在緩存中。 默認為緩存全局策略。

獲取 (ID,回調),其中:

  • id-唯一商品標識符。

  • callback ,function(err,value,cached,report),其中:

    • err-遇到的任何錯誤。
    • -的取出或生成的值。
    • 高速緩存 -如果在高速緩存中找不到有效的項目或具有以下鍵的對象,則為null:

      • 項目 -緩存值。
      • 已存儲 -將項目存儲在緩存中的時間戳。
      • ttl-記錄的緩存ttl值。
      • isStale-如果該項是陳舊的, 則為 true。

設置 (id,值,ttl,回調),其中:

  • id-唯一商品標識符
  • value-要存儲的字符串或對象值。
  • ttl-生存時間值(以毫秒為單位),在此值之后,該項目會自動從緩存中刪除(或標記為無效)。
  • callback-具有簽名函數(err)的函數。

有關您問題的答案,可以在文檔,來源中以及通過實驗找到: http : //hapijs.com/tutorials/caching
https://github.com/hapijs/catbox

  1. 您先調用generateFunc的回調,然后catbox處理(err, value) ,然后再調用get的回調。
  2. ttl “默認為緩存全局策略” 我猜expiresIn是該策略。
  3. 不要從generateFunc調用set ,而是通過next將值傳遞到catbox,它將為您存儲它。
  4. 有幾種訪問this方法的方法。 我還沒有測試代碼:
class Test {
  constructor(){
    this.testVar = 'hello';
  }

  register(server) {
    this.server = server;
    const self = this;
    this.testCache = server.cache({
      expiresIn: 1000*60*60,    
      segment: 'test',
      // Old trick
      generateFunc: function(key,next){ console.log(self.testVar); },
      // or new trick
      generateFunc: (key,next) => console.log(this.testVar) // Read about arrow functions
      // or
      generateFunc: this._cacheGenerateFunc.bind(this),

    });
  }

  _cacheGenerateFunc(id, next) {/* Your code */}

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM