Javascript Node.js和mysql回调:查询回调中的查询

Javascript Node.js和mysql回调:查询回调中的查询,javascript,mysql,node.js,node-mysql,Javascript,Mysql,Node.js,Node Mysql,如果我的数据库没有数据,我只想插入一些数据,所以我将insert SQL放入Select SQL的回调函数中,但我得到如下错误: {[错误:调用quit后无法将查询排队。]代码:'PROTOCOL_enqueue_after_quit',fatal:false} 我的代码片段如下: db.query('SELECT count(*) as Resultcount FROM tablename WHERE email = ? and password = ?', [post.email, post

如果我的数据库没有数据,我只想插入一些数据,所以我将insert SQL放入Select SQL的回调函数中,但我得到如下错误:

{[错误:调用quit后无法将查询排队。]代码:'PROTOCOL_enqueue_after_quit',fatal:false}

我的代码片段如下:

db.query('SELECT count(*) as Resultcount FROM tablename WHERE email = ? and password = ?', [post.email, post.password], function(error, result){
    if (result[0].Resultcount == 0){
        var query2 = db.query('INSERT INTO tablename SET ?', [post], function(err, result) {
            if(err){
              console.log(err);
           }
             console.log(result);
          });
    }
    else{
        console.log('have data already');
    }
});
有人能给我一些建议吗? 谢谢

----更新----

实际上,select SQL的回调函数不是匿名函数,我关于db.end()的代码片段如下:

var QueryResults = new queryResultFuntion(Back_results);

    db.query('SELECT count(*) as Resultcount FROM tablename WHERE email = ? and password = ?', [post.email, post.password], QueryResults.queryResult );


    db.end();
db.end()


根据创建连接的方式,您应该在回调中移动
db.end()
调用,或者如果在程序启动时打开连接,则根本不调用
db.end()
调用。

是否在该代码之后的某个地方关闭db连接?是的,当我完成db.query('select…')时,我调用了db.end();这意味着在运行INSERT查询时,连接将关闭。请将该代码添加到您的问题中,我将给出答案。另外,您何时创建连接?我的连接是在调用exports函数时创建的。如果不执行
db.end()
,则必须终止我的脚本(我在命令行上使用
节点
命令启动脚本)使用Ctrl-C。但这确实在退出后取消了
协议排队
@Lori Correct,这就是为什么我在前面加了
,具体取决于您创建连接的方式。例如,如果您正在编写一个节点服务器,那么只需打开一次连接,并且不希望服务器每次都退出。如果您正在编写脚本,则希望在脚本中的所有操作完成后结束连接。