【问题标题】:node js mysql Cannot Enqueue a query after calling quitnode js mysql在调用退出后无法将查询入队
【发布时间】:2014-04-27 20:19:05
【问题描述】:

我正在使用 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

有人知道如何解决这个问题吗?

谢谢

【问题讨论】:

  • 根据这个github.com/felixge/node-mysql#error-handling,它说定义你的连接,然后总是使用它。我这样做了,但现在我不确定将我的connection.end() 放在哪里。它说You can listen on the error event to handle server disconnection and for reconnecting purposes.,但我不确定将它放在哪个函数中......
  • 您应该在第一个请求完成时关闭一个全局连接,不要使用连接池并为每个请求单独获取一个连接,或者不要在请求处理程序中关闭连接

标签: mysql node.js


【解决方案1】:

如果您真的想关闭连接(为什么?如果您“经常运行 sql 命令”,您可能希望重用它,或者甚至更好 - 使用连接池),您需要在查询结果回调中执行此操作。所有命令都被放入命令队列并按顺序处理。

这就是你正在做的:

  • 打开mysql连接流
  • 将握手命令添加到队列中
  • 将查询命令添加到队列
  • 将退出命令添加到队列中,将连接标记为关闭
  • 开始处理命令
  • 现在在连接处于“关闭”状态时处理握手

【讨论】:

    【解决方案2】:

    由于 node js 是异步的,connection.connect() 和 connection.end() 被并行执行,

    如果要指定执行顺序,请使用回调,如

    connection = mysql.createConnection(sqlDetails);
    connection.connect(function(err,callback){
        connection.query(function(err,callback){
             connection.end();
     });
    });
    

    【讨论】:

      猜你喜欢
      • 2012-12-29
      • 2018-05-18
      • 2020-03-10
      • 2023-03-21
      • 2017-06-19
      • 2020-03-08
      • 1970-01-01
      • 2021-12-13
      • 1970-01-01
      相关资源
      最近更新 更多