Node.js MySQL模块,在连接关闭时自动重新连接数据库

时间:2018-10-12 19:46:55

标签: node.js node-modules node-mysql

我一直在使用这个Node.js MySQL模块来处理数据库。我的连接作为模块放置在单独的文件中。这是代码

let mysql = function connect(){
    return require('mysql').createConnection({
        hostname: 'localhost',
        user: 'root',
        password: 'root',
        database: 'chat_db'
    });
}
module.exports.connect = mysql;

我想对其进行一些修改,以防万一发生任何断开连接,它会自动重新连接

1 个答案:

答案 0 :(得分:1)

您可以自己编写重新连接代码,但是可能要花一些时间才能正确使用,我认为这并不容易。我建议使用连接池来保持与mysql的多个连接打开,并在需要时使用它们。这将使您能够定期检查连接是否仍然有效,如果没有,则销毁/重新连接。管理一个池比管理一个非常重要的连接要容易得多。

您正在使用的库中似乎有连接池:

  

此模块不是一个接一个地创建和管理连接,而是使用mysql.createPool(config)提供内置的连接池

https://github.com/mysqljs/mysql#pooling-connections

我成功使用过的另一个池化选项是generic-pool。具有通用池的设置可能如下所示:

const pool = require('generic-pool');
const mysql = require('mysql');

const connections = pool.createPool({
  create: (done) => {
    return mysql.createConnection({
      hostname: 'localhost',
      user: 'root',
      password: 'root',
      database: 'chat_db'
    }).connect(done);
  },
  destroy: connection => connection.destroy(),
  validate: connection => connection.threadId,
}, {
  testOnBorrow: true,
  acquireTimeoutMillis: 10000,
  min: 1,
  max: size,
});