首先,我有这个架构:
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是必需的
答案 0 :(得分:0)
经过数小时的调查后发现,点击之间点击速度超过500毫秒(DDoS的安全性)后,Easy Security Package就阻止了通话。