Ограничитель скорости облачных функций, не возвращающий данные - PullRequest
0 голосов
/ 22 января 2020

Я пытаюсь создать ограничитель скорости, который сохраняет временную метку в базе данных реального времени и возвращает объект, который имеет значения только за последние 60 секунд, чтобы в конечном итоге их подсчитать, однако это возвращает ноль каждый раз, и я вижу записи, передающиеся в база данных, в течение нескольких часов, следуя примеру из Ограничение скорости для облачных функций Google / Firebase? , но не повезло.

exports.testRateLimiter = 
functions.https.onRequest(async (req, res) => {

    var ref = db.ref('rateLimiter/test');
    var time = Date.now()
    var timeStr = time.toString()
    ref.push(timeStr)
    var orderByVal = Date.now()-60000
    var orderByValStr = orderByVal.toString()
    ref.orderByKey().startAt(orderByValStr).once("value", function(snapshot) {
        console.log(snapshot.val());
    });

});

1 Ответ

1 голос
/ 22 января 2020

Вызов переменной orderByValStr, предполагает, что вы намереваетесь использовать orderByValue(), а не orderByKey().

Если вы использовали Callable Cloud Functions для Firebase , используя асинхронный Синтаксис / ожидание имеет смысл. Однако для облачных функций HTTP-событий для Firebase , которые вы здесь используете, они подходят для использования с API обещаний.

exports.testRateLimiter = 
functions.https.onRequest((req, res) => {

    const ref = db.ref('rateLimiter/test');
    const time = Date.now()
    const timeStr = time.toString()
    ref.push(timeStr)

    const startTime = Date.now()-60000

    ref.orderByValue().startAt(startTime).once("value")
      .then(snapshot => {
          console.log(snapshot.numChildren()); // log children instead
          // do the thing
      })
      .catch(error => {
          if (!res.headerSent) {
              res.sendStatus(500);
          }
          console.log('Error: ', error);
      });

});

Я бы рассмотрел возможность использования firebase-functions-rate-limiter, как он обрабатывает для вас очистку. Я рекомендую просмотреть его исходный код и узнать, что на нем можно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...