Node.js和mysqlcallback:查询callback中的查询
所有我想要做的是插入一些数据,如果我的数据库没有,所以我把插入SQL到我的Select SQL的callback函数,但我得到这样的错误:
{[错误:调用退出后无法排队查询]代码:'PROTOCOL_ENQUEUE_AFTER_QUIT',致命: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'); } });
有人能给我一些build议吗? 谢谢
—- —-更新
实际上,select SQL的callback函数并不是一个匿名函数,我关于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()
调用会在SELECT
完成后将连接排队,所以当你试图执行内部INSERT
查询时,数据库连接将被closures,因此错误PROTOCOL_ENQUEUE_AFTER_QUIT,因为你正在尝试排队连接closures后的新命令。
根据创build连接的方式,您应该在callback中移动db.end()
调用,或者如果在程序启动时打开连接,则db.end()
调用db.end()
。
- 使用react-router并通过Passport.js进行身份validation – 可能吗?
- 如何通过websockets / socket-io / nowjs使用backbone.js
- 无法将函数的结果传递给node.js中的全局作用域
- 在返回之前将参数更新为JavaScriptcallback,而不使用全局variables
- 如何将命令行parameter passing给嵌套的脚本?
- 获取Grunt.js来运行node.js模块
- 为什么这两种asynchronous调用方式(一种使用承诺,另一种是生成器)产生相同的结果?
- 使用誓言的REST APItesting,tobi和node.js
- 在Node.js中提供一个Promise作为一个模块的导出asynchronous初始化的有效模式?