在任何web 应用程序中,我按下加号按钮,就会增加一个值。当我快速按下按钮时,验证不起作用,导致验证不会阻止(例外行为,值不在验证范围之外)。但是该值将被进一步设置,因为其余的请求将被提交。
重要提示:更新options
是动态的(例如$inc
或$set
)。
当前代码
module.model.update({ _id: id }, options /* are dynamic */, { safe: true }, function (err, updatedDocument) {
if (err) return respond(400, err);
module.model.findOne({ _id: id }, function (err, foundDocument) {
if (err) return respond(400, err);
foundDocument.validate(function (err) {
if (err) return respond(400, err);
return respond(200, foundDocument); // callback method
});
});
});
第一次猜测以防止出现问题
module.model.findOne({ _id: id }, function (err, foundDocument) {
foundDocument.set(options);
foundDocument.validate(function (err) {
if (err) return respond(400, err);
foundDocument.save(function (err, savedDocument) {
if (err) return respond(400, err);
return respond(200, doc);
});
});
});
...然后在验证有效时将执行保存。
但是有一个问题:该set
方法不支持$inc
或其他伪设置器,或者是吗?
我看到了使用更新函数的构造函数(显示代码)的可能性,但我不知道如何使用它:this.constructor.update.apply(this.constructor, args);
你对这个问题有什么好的做法吗?