どの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);
この問題の良い習慣はありますか?