Node.js 和 mysql 回调:查询回调中的查询
Posted
技术标签:
【中文标题】Node.js 和 mysql 回调:查询回调中的查询【英文标题】:Node.js and mysql Callback : query in query callback 【发布时间】:2013-04-14 14:28:56 【问题描述】:如果我的数据库没有数据,我想做的就是插入一些数据,所以我将插入 SQL 放入我的 Select SQL 的回调函数中,但出现如下错误:
[错误:调用退出后无法将查询排入队列。] 代码:'PROTOCOL_ENQUEUE_AFTER_QUIT',致命:false
我的代码 sn-p 在这里:
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()的代码sn-p是这样的:
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.query('select ...') 时,我调用了 db.end(); 这意味着当您的 INSERT 查询运行时,连接将被关闭。请将该代码添加到您的问题中,我会回答。 另外,你什么时候创建连接? 我的连接是在调用导出函数时创建的 【参考方案1】:db.end()
调用将在 SELECT
完成后排队关闭连接,因此当您尝试执行内部 INSERT
查询时,数据库连接将已关闭,因此错误 PROTOCOL_ENQUEUE_AFTER_QUIT,因为您正在尝试在连接关闭后对新命令进行排队。
根据您创建连接的方式,您应该将db.end()
调用移到回调中,或者如果连接在程序启动时打开,则根本不调用db.end()
。
【讨论】:
完全不执行db.end()
会导致必须使用Ctrl-C 终止我的脚本(我在命令行上使用node
命令开始)。但这确实摆脱了PROTOCOL_ENQUEUE_AFTER_QUIT
@Lori 正确,这就是为什么我用Depending on how you are creating the connection
开头。例如,如果您正在编写一个节点服务器,您只需打开一次连接,并且不期望服务器每次都会退出。如果您正在编写脚本,您可能希望在脚本中的所有操作完成后结束连接。以上是关于Node.js 和 mysql 回调:查询回调中的查询的主要内容,如果未能解决你的问题,请参考以下文章