Meteor SimpleSchema +方法:点击太快会抛出错误

时间:2015-07-22 15:16:47

标签: javascript methods meteor

首先,我有这个架构:

Rides = new Mongo.Collection('Rides');

Rides.attachSchema(
    new SimpleSchema({
        name:{type:String},
        'passengers.$._id': {
            type: String,
            autoValue: function(){
                if(this.isUpdate && this.operator !== '$pull')
                    return this.userId;
                else
                    this.unset();
            }
        },
        'passengers.$.validate':{type:Boolean},
);

服务器端,我有这些方法:

Meteor.methods({
    leaveRide: function(_id){
        check(_id, String);
        Rides.update(_id, {
            $pull:{passengers:{
                _id:this.userId
            }}
        });
    },
    joinRide: function(_id){
        check(_id, String);
        Rides.update(_id, {
            $addToSet: {passengers: {validate:true}}
         });
    }
});

最后,两个按钮JoinLeave调用:

 Template.ride.events({
    'click .join': function(e){
        Meteor.call('joinRide', this.ride._id);
    },
    'click .leave': function(e){
        Meteor.call('leaveRide', this.ride._id);
    },
});

它工作得非常好,问题是当我在按钮上点击太快(一个接一个)时,似乎查询没有时间处理我得到:

客户端(其中任何一个):

  

调用方法时出错' leaveRide':内部服务器错误[500]
  调用方法' joinRide'时出错:ID是必需的[400]

服务器端(其中任何一个):

  

调用方法时出现异常' leaveRide'错误:在调用' leaveRide'
时没有检查()所有参数   调用方法' joinRide'错误:ID是必需的

1 个答案:

答案 0 :(得分:0)

经过数小时的调查后发现,点击之间点击速度超过500毫秒(DDoS的安全性)后,Easy Security Package就阻止了通话。

请参阅:https://github.com/matteodem/meteor-easy-security