繁体   English   中英

流星SimpleSchema +方法:单击得太快会引发错误

[英]Meteor SimpleSchema + Methods : clicking too fast throw an error

首先,我有以下架构:

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}}
         });
    }
});

最后,有两个按钮“ Join和“ Leave

 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

经过数小时的调查,事实证明,单击之间的间隔时间超过500毫秒时,Easy Security Package阻止了呼叫(针对DDoS的安全性)。

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

暂无
暂无

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

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