Node.js,mysql“连接丢失,服务器关闭了连接”

时间:2019-07-05 07:16:30

标签: mysql node.js

我将mysql连接到nodejs。一段时间后,您会收到错误消息:

  

“连接丢失,服务器关闭了连接”

我需要你的帮助。

发生错误,我们添加了功能handleDisconnect。但是,一旦断开连接解决,第二个错误将从Connection lost the server closed the connection再次发生。

我想知道为什么只应该一次而不是第二次。

ps:使用翻译器时,说明可能不够流畅。

这是app.js文件的一部分

// connection to databases
var mysql_dbc = require('./config/db_con')();
var connection = mysql_dbc.init();
mysql_dbc.test_open(connection);

// Added Code
handleDisconnect(connection);
function handleDisconnect(client) {

  client.on('error', function (error) {

    if (!error.fatal) return;

    if (error.code !== 'PROTOCOL_CONNECTION_LOST') throw err;

    console.error('> Re-connecting lost MySQL connection: ' + error.stack);

    mysql_dbc.test_open(connection);

  });

};

1 个答案:

答案 0 :(得分:1)

您可以尝试使用this代码来处理服务器断开连接:

var mysql = require("mysql");
var configuration = {
  host: "localhost",
  user: "root",
  password: "mysql",
  database: "blog"
};
var connection;

function handleDisconnect() {
  connection = mysql.createConnection(configuration);

  connection.connect(function(err) {
    if (err) {
      console.log("error when connecting to db:", err);
      setTimeout(handleDisconnect, 2000);
    }else{
        console.log("connection is successfull");
    }
  });
  connection.on("error", function(err) {
    console.log("db error", err);
    if (err.code === "PROTOCOL_CONNECTION_LOST") {
      handleDisconnect();
    } else {
      throw err;
    }
  });
}
handleDisconnect();

由于网络问题,您可能会失去与MySQL服务器的连接,  服务器使您超时,服务器重新启动或崩溃。  所有这些事件都被视为致命错误。

通过建立新连接来重新连接。 一旦终止,现有连接对象就无法通过设计重新连接。

使用池,断开的连接将从池中删除,从而释放空间,以便在下一个getConnection调用上创建新连接。