Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 查询为空Nodejs sequalize_Javascript_Mysql_Node.js_Sequelize.js_Postman - Fatal编程技术网

Javascript 查询为空Nodejs sequalize

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:

我正在尝试更新nodejs应用程序中的数据。我和邮递员一起测试过

我的发展步骤是:

  • 正在从DB(MySQL)获取id为10的数据以更新>>未处理的拒绝SequelizeDatabaseError:查询为空

  • 我意识到,我使用了错误的id,所以我改为正确的id:50>>其他一些错误

  • 好的,我修复了与我不准确的工作相关的一些其他错误,并使用良好的id:50>>未处理的拒绝SequelizeDatabaseError:Unhandled rejection SequelizeDatabaseError:Query为空
  • 奇怪的行为,因为这个id之前是好的。。。(在3.步骤中)好的,我只是将id更改为另一个正确的id:51>>其他一些错误
  • 好的,我修复了另一个错误,用新id再次尝试更新:51>>未处理的拒绝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。理解你的查询可以吗请在说明中也添加此项。