2015-11-05 51 views
1

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

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

我知道generateFunc用來生成一個新的緩存項,如果調用get(當一個人不在緩存中找到) - 直接從API文檔。不過,我仍然不知道如何與generateFunc使用get()()

  • 如果我使用get()與generateFunc()時,得到的回調generateFunc的回調(命名爲下一個())?
  • 如果我有expiresIn在server.cache中定義,我必須在get的回調和generateFunc的回調中定義ttl嗎?
  • 我還在用generateFunc的回調函數(next())來緩存項目嗎?
  • 如果我在類對象中使用以下內容,如何從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,下一個) - 用於當調用get當一個人沒有在緩存中找到生成一個新的緩存項()的函數。

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

得到(ID,回調),其中:

  • ID - 唯一的項目標識符。

  • 回調,函數(ERR,價值,緩存,報告),其中:

    • ERR - 遇到的任何錯誤。
    • - 提取或生成的值。
    • 緩存 - 空,如果一個有效的項目沒有在緩存中,或使用下列鍵對象中發現:

      • 項目 - 緩存值。
      • 存儲 - 時間戳當項目被存儲在緩存中。
      • TTL - 備案緩存TTL值。
      • isStale - 如果該項目是過時。

設置(ID,值,TTL,回調),其中:

  • ID - 唯一項目標識符
  • - 串或要存儲的對象值。
  • ttl - 一個以毫秒爲單位的生存時間值,此值自該項目自動從緩存中刪除(或被標記爲無效)。
  • 回調 - 帶簽名函數(err)的函數。

回答

0

你的問題的答案可以在文檔,來源,並通過實驗發現: 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 */} 

} 
相關問題