Как использовать кеширование с пакетом riot-lol-api npm? - PullRequest
0 голосов
/ 09 ноября 2018

ВОПРОС:

Прочитав это:

https://www.npmjs.com/package/riot-lol-api#caching

Я все еще в замешательстве. Я впервые пытаюсь кешировать ответы API.

Например, я не знаю, какие значения доступны для YOUR_CACHE_STRATEGY, и это не объясняется в документации.

По сути, я бы искал пример, например, как я могу кешировать и обслуживать в течение 5 минут ответ от /lol/summoner/v3/summoners/by-name/?


КОД:

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 !"});
            }
        });

1 Ответ

0 голосов
/ 10 ноября 2018

Документация на самом деле не очень подробная. Что вам нужно сделать, так это реализовать объект кеша, как указано в примере кода из документа (закомментированная область).

Ниже приведен пример кэширования в массив (в памяти). Вы также можете сохранить этот массив в файл или в базу данных 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);    
  }
};

YOUR_CACHE_STRATEGY - это объект, который передается вашей функции set в параметре cacheStrategy. Они предполагают, что это может быть число, представляющее срок службы записи в кеше, поэтому я реализовал таймер для удаления записи в кеше через количество секунд, равное cacheStrategy.

Вы бы позвонили по этому номеру:

riotRequest.request(region.toLowerCase(), 'summoner', '/lol/summoner/v3/summoners/by-name/'+encodeURI(player), 30, function(err, data) {//.....

Чтобы включить кэширование, необходимо передать объект cache в конструктор RiotRequest:

var riotRequest = new RiotRequest('my_api_key', cache);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...