[英]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.