javascript - 云函数速率限制器,不返回数据

标签 javascript firebase firebase-realtime-database google-cloud-functions

我正在尝试构建一个速率限制器,将时间戳保存到实时数据库并返回仅具有过去 60 秒值的对象以最终对它们进行计数,但是每次都会返回 null,我可以看到传递到的写入数据库,按照 Rate limiting for Google/Firebase cloud functions? 中的示例进行了几个小时的处理但没有任何运气。

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

});

最佳答案

调用变量 orderByValStr,建议您打算使用 orderByValue() 而不是 orderByKey()

如果您使用 Callable Cloud Functions for Firebase ,使用 async/await 语法是有意义的。但是对于 HTTP Events Cloud Functions for Firebase ,正如您在此处使用的那样,它们适合使用 Promises 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因为它会为您处理清理工作。我建议查看它的 source code并从中学习你能学到什么。

关于javascript - 云函数速率限制器,不返回数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59850663/

相关文章:

javascript - TypeError : _app2. default.database 不是函数。 (在 '_app2.default.database()' 中, '_app2.default.database' 未定义)

javascript - 如何在 appcelerator 中隐藏幻灯片菜单?

firebase - Flutter格式异常: Unexpected Character (at character 1)

swift - 在 Firestore 中更改特定值时如何有效更新集合文档?

typescript - 传递 typescript 类方法作为回调

ios - 在客户端之间传递连接状态

javascript - 控制 iframe 内的 Colorbox 位置

javascript - 使用 Sinon 进行单元测试 Mongoose 模型回调

javascript - 如何创建包含 GUI 并控制父浏览器窗口的弹出浏览器窗口

android - Firebase 使用提供商帐户重置密码