如下图所示,如何使用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的回调中定义ttl和generateFunc的回调中?
仍然在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字符串或对象。
  next-使用签名函数(err,value,ttl)返回新项时调用的方法,其中:
  
  
  err-错误条件。
  value-生成的新值。
  ttl-缓存ttl值(以毫秒为单位)。设置为0以跳过存储在缓存中。默认为缓存全局策略。
  
  
  
  get(id,callback),其中:
  
  
  id-唯一商品标识符。
  回调,函数(错误,值,已缓存,报告),其中:
  
  
  err-遇到的任何错误。
  value-获取或生成的值。
  高速缓存-如果在高速缓存中找不到有效的项目或具有以下键的对象,则为null:
  
  item-缓存的值。
  
  
  已存储-将项目存储在缓存中的时间戳。
  
  
  ttl-记录的缓存ttl值。
  
  
  isStale-如果该项是陈旧的,则为true。
  
  
  
  
  set(id,value,ttl,callback),其中:
  
  
  id-唯一商品标识符
  value-要存储的字符串或对象值。
  ttl-生存时间值(以毫秒为单位),在此值之后,该项目会自动从缓存中删除(或标记为无效)。
  callback-具有签名函数(err)的函数。

最佳答案

您的问题的答案可以在文档,源中以及通过实验找到:
http://hapijs.com/tutorials/caching
https://github.com/hapijs/catbox


调用generateFunc的回调,然后catbox处理(err, value),然后调用get的回调。
ttl“默认为缓存全局策略”。我想expiresIn是该政策。
不要从set调用generateFunc,而是通过next将值传递给catbox,它将为您存储它。
有几种访问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 */}

}

关于javascript - 如何在Hapi.js的server.cache()中使用generateFunc?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33551854/

10-11 07:23