节点js mysql不能在调用quit之后排队查询
我正在使用node.js和mysql,经常运行sql命令。
我得到这个错误: Cannot enqueue Handshake after invoking quit
。
这是我的时候
connection = mysql.createConnection(sqlDetails); connection.connect();
和
connection.end();
如果我注释.connect
和.end
行,那么我得到错误ER_CON_COUNT_ERROR: Too many connections
。
有谁知道如何解决这个问题?
谢谢
如果你真的想closures连接(为什么?如果你经常运行sql命令,你可能想要重用它,甚至更好 – 使用连接池),你需要在查询结果callback中做到这一点。 所有命令都被放入命令队列并按顺序处理。
这就是你在做什么:
- 打开连接stream到MySQL
- 添加Handshake命令来排队
- 将Query命令添加到队列中
- 将Quit命令添加到队列中,将连接标记为closures
- 开始处理命令
- 现在握手在连接处于“closures”状态时被处理
由于节点js是asynchronous的,connection.connect()和connection.end()并行执行,
如果要指定执行顺序,请使用类似的callback
connection = mysql.createConnection(sqlDetails); connection.connect(function(err,callback){ connection.query(function(err,callback){ connection.end(); }); });