Javascript 查询为空Nodejs sequalize
我正在尝试更新nodejs应用程序中的数据。我和邮递员一起测试过 我的发展步骤是:Javascript 查询为空Nodejs sequalize,javascript,mysql,node.js,sequelize.js,postman,Javascript,Mysql,Node.js,Sequelize.js,Postman,我正在尝试更新nodejs应用程序中的数据。我和邮递员一起测试过 我的发展步骤是: 正在从DB(MySQL)获取id为10的数据以更新>>未处理的拒绝SequelizeDatabaseError:查询为空 我意识到,我使用了错误的id,所以我改为正确的id:50>>其他一些错误 好的,我修复了与我不准确的工作相关的一些其他错误,并使用良好的id:50>>未处理的拒绝SequelizeDatabaseError:Unhandled rejection SequelizeDatabaseError:
Unhandled rejection SequelizeDatabaseError: Query was empty
at Query.formatError (C:\Users\bla_bla_bla\Documents\work\_nodejs\parentfolder\application\application\node_modules\sequelize\lib\dialects\mysql\query.js:223:16)
at Query.connection.query [as onResult] (C:\Users\bla_bla_bla\Documents\work\_nodejs\parentfolder\application\application\node_modules\sequelize\lib\dialects\mysql\query.js:55:23)
at Query.Command.execute (C:\Users\bla_bla_bla\Documents\work\_nodejs\parentfolder\application\application\node_modules\mysql2\lib\commands\command.js:30:12)
at Connection.handlePacket (C:\Users\bla_bla_bla\Documents\work\_nodejs\parentfolder\application\application\node_modules\mysql2\lib\connection.js:515:28)
at PacketParser.onPacket (C:\Users\bla_bla_bla\Documents\work\_nodejs\parentfolder\application\application\node_modules\mysql2\lib\connection.js:94:16)
at PacketParser.executeStart (C:\Users\bla_bla_bla\Documents\work\_nodejs\parentfolder\application\application\node_modules\mysql2\lib\packet_parser.js:77:14)
at Socket.<anonymous> (C:\Users\bla_bla_bla\Documents\work\_nodejs\parentfolder\application\application\node_modules\mysql2\lib\connection.js:102:29)
at emitOne (events.js:96:13)
at Socket.emit (events.js:188:7)
at readableAddChunk (_stream_readable.js:176:18)
at Socket.Readable.push (_stream_readable.js:134:10)
at TCP.onread (net.js:547:20
错误的SQL更新:
Executing (default): UPDATE `cardModules` SET `field1`='xxxxxxxx',`field2`='xxxxxxxxxx',`field3`='MEDIUM',`field4`=false,`field5`=false WHERE `id` = 43
Executing (default):
问题是:为什么要这样做?我刚刚意识到这个问题的小时数。如果Sequalize在DB值和可更新值中没有发现任何差异,那么将生成一个空SQL字符串并希望执行此操作。因此,同样的sequlize抛出的查询是空消息 因此,如果没有更改,但您希望更新,则会出现此错误 我处理此问题以检查错误消息,如下所示:
if(err.message == 'Query was empty'){
console.log('There is no changes in the update, lets continue the progress...');
next();
}
为了更清楚地说明发生这种情况的方式/原因:通常,Sequelize会跟踪对模型的更改,然后在调用model.save()时,它只会尝试更新已更改的SQL列
let person = async Employee.findOne();
person.name = "Jerry Jones";
person.save(); //All good here, and only the name column will be updated
如果属性没有更改,它甚至不会尝试进行SQL调用
let person = async Employee.findOne();
person.save(); //No errors, but no SQL call will be made
但是,任何设置为“undefined”值(与null不同!)的属性仍将导致模型标记为脏/已更改,但在构造SQL调用时将被忽略。因此,如果只更改一个属性并将其设置为未定义,Sequelize仍将尝试进行调用,但查询将为空
let userUpdates = {age: 99, title: "Developer"};
let person = async Employee.findOne();
person.name = userUpdates.name; //name is undefined, but property will still be considered changed.
person.save(); //Query will be empty!!
也许这会对@BinitGhetiya有所帮助,我之前看过这篇文章。在这个cade中有一个未定义的字段错误,但在我的情况下,我的所有字段都已填充。我得到了数据,但只得到了一个,第二个我得到这个&*@{Đ@&错误:查询是空的。请再次确认您的所有表列都是在类(模型)中定义的@BinitGhetiya我的问题与模型DB同步无关。这些是同步的,因为我有一个案例——第一次调用——当我可以更新对象时!但是如果我测试该id两次,第三次等等……我会得到这个错误。因此,如果这些都没有同步,那么我也无法在第一次更新obejct。理解你的查询可以吗请在说明中也添加此项。