首页 > 解决方案 > Node.js 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;

我想稍微修改一下,这样,如果发生任何断开连接,它会自动重新连接

标签: node.jsnode-modulesnode-mysql

解决方案


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

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

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

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

我成功使用的另一个池化选项是generic-pool。使用 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,
});

推荐阅读