gpt4 book ai didi

javascript - Sails.js - 如果我给出未定义的 "id",所有记录都会被销毁

转载 作者:行者123 更新时间:2023-12-03 04:03:58 25 4
gpt4 key购买 nike

  // 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 次。好在该项目尚未发布,并且重新创建数据库并不困难。

我正在做额外的检查,例如:

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

但是..无论如何这并没有帮助,我曾经发生过一次事故并犯了一个错字,例如:

    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 名玩家(测试者),现在他们都被删除了。

所以,我必须永远解决这个问题。如果我给出未定义的值,是否有任何可能的方法来保护我的数据库不删除整个表?我正在使用 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'));
}
}
};

最佳答案

在 DemoTable.js 模型中实现 beforeDestroy ( Doc )。
像这样的事情:

beforeDestroy: function(criteria, cb) {
if (!criteria) {
return cb(new Error('Empty criteria'));
} else { // Added else part
return cb();
}
}

此外,最好先在回调中处理err。喜欢:

DemoTable.findOne(999, function(err, found) {
if(err) { // Error handling if-block
// Handle error as you like
return false;
}
if(found === undefined || found.id === undefined) return false;
DemoTable.destroy(found.id, function(err, destroyed) {
// does not destroy the whole DemoTable
});
});

关于javascript - Sails.js - 如果我给出未定义的 "id",所有记录都会被销毁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44647129/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com