Javascript 如何在riot lol api npm包中使用缓存?

Javascript 如何在riot lol api npm包中使用缓存?,javascript,node.js,caching,Javascript,Node.js,Caching,问题: riotRequest.request(region.toLowerCase(), 'summoner', '/lol/summoner/v3/summoners/by-name/'+encodeURI(player), function(err, data) { if (!err) { var summonerID = data.id; } else { console.er

问题:

riotRequest.request(region.toLowerCase(), 'summoner', '/lol/summoner/v3/summoners/by-name/'+encodeURI(player), function(err, data) {
            if (!err) {
                var summonerID = data.id;
            } else {
                console.error("ERROR1: "+err);
                res.render("page", {errorMessage: "Player not found !"});
            }
        });
读完这篇文章:

我还是很困惑。这是我第一次尝试缓存api响应

例如,我不知道哪些值可用于
您的\u缓存\u策略
,文档中也没有对此进行解释

本质上,我想找一个例子,比如如何缓存来自
/lol/courger/v3/courgers/by name/
的响应并为其提供5分钟服务


代码:

riotRequest.request(region.toLowerCase(), 'summoner', '/lol/summoner/v3/summoners/by-name/'+encodeURI(player), function(err, data) {
            if (!err) {
                var summonerID = data.id;
            } else {
                console.error("ERROR1: "+err);
                res.render("page", {errorMessage: "Player not found !"});
            }
        });

文件确实不是很详细。您需要做的基本上是实现文档中的代码示例(注释区域)中指定的缓存对象

下面是缓存到阵列(内存中)的示例。您还可以按照文档中的建议将此数组保存到文件或Redis数据库中

//cacheData holds objects of type {key: 123, value: "request data"}
var cacheData = []
var cacheIndex = 0

function deleteFromCache(key) {
  for (var i = 0; i < cacheData.length; i++) {
    if (cacheData[i].key == key) {
      cacheData.splice(i, 1);
      return;
    }
  }
}

var cache = {
  get: function(region, endpoint, cb) {       
    for (var entry of cacheData) {
      if (entry.value == data) {
        //we have a cache hit
        return cb(null, entry.value);
      }      
    }
    return cb(null, null);
  },
  set: function(region, endpoint, cacheStrategy, data) {
    var key = cacheIndex++;
    var value = data;

    cacheData.push({key, value});

    //cacheStrategy is a number representing the number of seconds to keep the data in cache
    setTimeout(() => {
      deleteFromCache(key);
    }, cacheStrategy * 1000);    
  }
};
要启用缓存,您需要将
cache
对象传递给
RiotRequest
的构造函数:

var riotRequest = new RiotRequest('my_api_key', cache);