Meteor 如何限制服务器端的呼叫?

Meteor 如何限制服务器端的呼叫?,meteor,Meteor,我知道客户端_underline.js可以用来限制点击率,但如何限制服务器端的呼叫?我曾想过使用相同的模式,但不幸的是,throttle似乎不允许区分Meteor.userId()的 目前meteor中没有对此的内置支持,但是它已经在路线图上了 理论上,您可以在这里使用一些选项,但您必须推出自己的解决方案这是一个我已经编写好的包,但还没有提交到大气中(等待我熟悉tinytest并为其编写单元测试) 可以随意使用、扩展、修复和贡献(鼓励拉取请求) 这个概念非常简单,它只在服务器上运行(应该只运行

我知道客户端_underline.js可以用来限制点击率,但如何限制服务器端的呼叫?我曾想过使用相同的模式,但不幸的是,throttle似乎不允许区分Meteor.userId()的


目前meteor中没有对此的内置支持,但是它已经在路线图上了


理论上,您可以在这里使用一些选项,但您必须推出自己的解决方案

这是一个我已经编写好的包,但还没有提交到大气中(等待我熟悉tinytest并为其编写单元测试)

可以随意使用、扩展、修复和贡献(鼓励拉取请求)

这个概念非常简单,它只在服务器上运行(应该只运行)

你首先需要拿出一个独特的关键,你想油门

例如:
Meteor.userId()+“我的函数名”+“随便什么”

此系统使用新的集合“throttle”和一些辅助方法来:
检查
设置
清除
记录。还有一个助手
checkThenSet
方法,这实际上是最常见的模式,检查我们是否可以做些什么, 这也创造了我们的记录

用法 (用例)如果你的应用程序正在发送电子邮件,你就不会希望通过网络发送相同的电子邮件 一次又一次,即使是用户触发了它

// on server
if (!Throttle.checkThenSet(key, allowedCount, expireInSec)) {
  throw new Meteor.Error(500, 'You may only send ' + allowedCount + ' emails at a time, wait a while and try again');
}
....
节流方法研究
  • checkThenSet(key,allowedCount,expireInSec)
    检查一个密钥,如果通过,则设置该密钥以备将来检查
  • check(key,allowedCount)
    检查一个key,如果存在少于
    allowedCount
    的(未过期)记录,则它通过
  • set(key,expireInSec)
    为key设置一条记录,它将在
    expireInSec
    秒后过期,例如:
    60
    =1分钟
  • purge()
方法(可调用)
  • throttle(按键、允许计数、过期输入)
    -->
    throttle.选中设置()
  • 油门检查(钥匙,允许计数)
    -->
    油门检查()
  • throttle set(键,expireInSec)
    -->
    throttle.set()
请注意,这是不鼓励的,因此答案应该是搜索解决方案的终点(而不是参考文献的另一个中途停留,随着时间的推移,这些参考文献往往会过时)。请考虑在这里添加一个独立的概要,将链接作为参考。
// on server
if (!Throttle.checkThenSet(key, allowedCount, expireInSec)) {
  throw new Meteor.Error(500, 'You may only send ' + allowedCount + ' emails at a time, wait a while and try again');
}
....