2015-11-05 49 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 */} 

} 
相关问题