0
// DemoTable with id 999 does not exist
DemoTable.findOne(999, function(err, found) {
DemoTable.destroy(found.id, function(err, destroyed) {
// destroys the whole DemoTable
});
});
私はSails.jsでオンラインゲームをプログラミングしていましたが、そのような結果は6ヶ月で約10回起こりました。このプロジェクトはまだリリースされておらず、DBを再作成するのに苦労もしませんでした。Sails.js - 未定義の "id"を与えるとすべてのレコードが破棄されます
私は同じように、余分なチェックをしていた。とにかく
DemoTable.findOne(999, function(err, found) {
if(found === undefined || found.id === undefined) return false;
DemoTable.destroy(found.id, function(err, destroyed) {
// does not destroy the whole DemoTable
});
});
しかし...このdidntの助けを、私は一度事故を行なったし、タイプミスをした、のように:
DemoTable.find(999, function(err, found) {
if(found[0] === undefined || found[0].id === undefined) return false;
DemoTable.destroy(found.id, function(err, destroyed) {
// destroyed the whole DemoTable
});
});
と私はすでに持っていました私のゲームで10人のプレイヤー(テスター)のように、今それらはすべて削除されました。
私はこれを一度限り解決しなければなりません。 定義されていない値を与えると、私のDB全体がテーブルを削除しないように保護する方法はありますか?私はSails.jsを使用しています。
*編集*私のモデルは次のようになります。
module.exports = {
attributes: {
piece: { type:'string' },
shots: { type:'text' },
from_x: { type:'integer' },
to_x: { type:'integer' },
from_y: { type:'integer' },
to_y: { type:'integer' },
duration: { type:'integer' },
pawn_id: { type:'integer' },
building_id: { type:'integer' },
user_id: { type:'integer' },
health: { type:'integer' },
level: { type:'integer' },
fighting: { type:'string' },
chess: { type:'string' },
createdAt: {
type: 'datetime',
columnName: 'createdat'
},
updatedAt: {
type: 'datetime',
columnName: 'updatedat'
},
toJSON: function() {
var obj = this.toObject();
delete obj._csrf;
return obj;
}
},
beforeDestroy: function(criteria, cb) {
if (!criteria) {
return cb(new Error('Empty criteria'));
}
}
};
Thx!それは良い解決策のように思えます:) – mansim
うーん、うまくいきません。私は例のようにDocsのような属性の下に追加しましたが、破壊しようとするとアイテムは破壊されず、定義されていないコールバックしか得られず、エラーも結果もなくなり、破壊は終了しません。 – mansim
ライフサイクルコールバック関数はモデル内の 'attributes'の下に**ありません**。 [密接に]インデントを確認してください(http://sailsjs.com/documentation/concepts/models-and-orm/lifecycle-callbacks#?example) – Sangharsh