Javascript Node.js和mysql回调:查询回调中的查询
如果我的数据库没有数据,我只想插入一些数据,所以我将insert SQL放入Select SQL的回调函数中,但我得到如下错误: {[错误:调用quit后无法将查询排队。]代码:'PROTOCOL_enqueue_after_quit',fatal:false} 我的代码片段如下: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
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,这就是为什么我在前面加了,具体取决于您创建连接的方式。例如,如果您正在编写一个节点服务器,那么只需打开一次连接,并且不希望服务器每次都退出。如果您正在编写脚本,则希望在脚本中的所有操作完成后结束连接。