繁体   English   中英

云功能速率限制器,不返回数据

[英]Cloud functions rate limiter, not returning data

我正在尝试构建一个速率限制器,将时间戳保存到实时数据库并返回仅具有最近 60 秒的值的对象以最终计算它们,但是每次都会返回 null,我可以看到写入传递给数据库,一直按照Google/Firebase 云功能的 Rate limiting 示例,在这几个小时内? 但没有任何运气。

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 语法是有意义的。 但是,对于 Firebase 的 HTTP Events Cloud Functions ,正如您在此处使用的那样,它们适合使用 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 ,因为它会为您处理清理工作。 我建议您查看它的源代码并从中学习您能学到的东西。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM