使用池的node.js mysql中的错误处理和丢失连接

问题描述 投票:0回答:2

我正在使用node.js npm 模块mysql 来连接MySQL 数据库。

我看到有可能使用:

  • pool.getConnection()、connection.query()和connection.release()
  • 或 pool.query

我对第二种情况有两个问题。

1)使用 pool.query 时出现错误、丢失连接是否有自动重新连接? (使用池时是否需要“处理断开连接”功能?

2)使用第一种方法我可以设置connection.on('error', function(){...})。在第二种情况下该怎么做? (pool.on('错误'...) ?)

node.js connection-pooling node-mysql
2个回答
1
投票

1)如果我错了,请纠正我,但我认为在使用池查询时断开连接时没有自动连接的方法。这是一个很好的代码设计,可以让我们知道错误,并让我们决定在断开连接时做什么。

2)我们可以使用

pool.getConnection((err, con) => {})

这是我在运行查询之前用于检查连接的代码。希望有帮助。

connect: function ()
    {
        return new Promise((resolve, reject) => {
            let pool = Mysql.createPool({
                connectionLimit: config.mysql.connectionLimit,
                host: config.mysql.host,
                user: config.mysql.user,
                password: config.mysql.password,
                database: config.mysql.database
            });

            pool.getConnection((err, con) =>
            {
                try
                {
                    if (con)
                    {
                        con.release();
                        resolve({"status":"success", "data":"MySQL connected.", "con":pool});
                    }
                }
                catch (err)
                {
                    reject({"status":"failed", "error":`MySQL error. ${err}`});
                }
                resolve({"status":"failed", "error":"Error connecting to MySQL."});
            });
        });
    }

0
投票

您可以像这样设置池连接:

const mysql = require("mysql2");

const pool = mysql.createPool({
    host: "localhost",
    port: 3306,
    user: "root",
    password: "password",
    database: "test",
  }).promise();

 //test the connection
(async () => {
  try {
    const connection = await pool.getConnection();

    console.log("Database connected successfully");

    // Release the connection back to the pool
    connection.release(); 

  } catch (error) {
    console.error("Database connection error : ", error);
  }
})();

module.exports = pool;
© www.soinside.com 2019 - 2024. All rights reserved.