繁体   English   中英

在ValidatedMethod中流星this.unblock

[英]Meteor this.unblock in ValidatedMethod

我有一个经过验证的方法:

export const updateSuitClass = new ValidatedMethod({
  name: 'presets.suitClass.update',
  validate: new SimpleSchema({
    _id: { type: String },
    rankClass: { type: String },
    suitClass: { type: String },
  }).validator(),
  run({ _id, rankClass, suitClass }) {
    const userId = Meteor.userId();
    if (userId) {
      const lookUpPreset = Presets.findOne({ _id });
      if (userId === lookUpPreset.owner) {
        Presets.update(_id, { $set: { [`${rankClass}.${suitClass}`]: !lookUpPreset[rankClass][suitClass] } });
      } else {
        throw new Meteor.Error('not-authorized', 'Please don\'t update another user\'s preset.');
      }
    } else {
      throw new Meteor.Error('not-authorized', 'Please login to update your preset.');
    }
  },
});

会在点击事件(在列表中的项目上,并在其旁边的选中标记之间切换以指示已选中)上被调用以保存用户配置设置的状态。 问题是,它随着用户的点击和点击而被调用,因此它会被频繁调用。

第一个问题,对服务器进行如此多次的调用以一次更新一部分是否不好? 我应该只保存一个按钮(ew!)并进行一次批量更新吗?

第二个问题,如果我保持原样的方法代码,但添加this.unblock或Meteor.defer,我该如何对经过验证的方法进行处理? 我试过将它放在运行后,运行前,整个块之前...

你们可以帮忙吗?

第一个问题,对服务器进行如此多次的调用以一次更新一部分是否不好? 我应该只保存一个按钮(ew!)并进行一次批量更新吗?

如果要避免单个用户的大量点击,请使用ddp-rate-limiter程序包并为您的方法创建一个规则。 使用此程序包,您可以在一段时间内限制服务器上的呼叫。

第二个问题,如果我保持原样的方法代码,但添加this.unblock或Meteor.defer,我该如何对经过验证的方法进行处理? 我试过将它放在运行后,运行前,整个块之前...

ValidatedMethod run函数的工作方式与方法函数相同。 因此,您只需要在run函数中添加this.unblock

希望能帮助到你!

暂无
暂无

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

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