gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 22:01:55 25 4
gpt4 key购买 nike

我正在尝试构建一个速率限制器,将时间戳保存到实时数据库并返回仅具有过去 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com