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);