node-mysql2 icon indicating copy to clipboard operation
node-mysql2 copied to clipboard

createPoolCluster does not maintain a connection to the same database throughout execution

Open DatTN95 opened this issue 1 year ago • 0 comments

when i call await execSQLFC(sql); then the problem occurs. if i add await connection.query(USE ${process.env.SQL_FCDB}); it will working. my configure (something wrong?):

****DBConfig.js

const mysql = require('mysql2/promise')

const poolCluster = mysql.createPoolCluster();

poolCluster.add('FloorcareDB', {
    host: process.env.SQL_HOST,
    user: process.env.SQL_USER,
    password: process.env.SQL_PWD,
    database: process.env.SQL_FCDB,
    connectionLimit: 50,
    waitForConnections: true,
    maxPreparedStatements: 500,
    queueLimit: 0,
    dateStrings: true,
    keepAliveInitialDelay: 10000,
    enableKeepAlive: true
});

poolCluster.add('TraceDB', {
    host: process.env.SQL_HOST,
    user: process.env.SQL_USER,
    password: process.env.SQL_PWD,
    database: process.env.SQL_TRACEDB,
    connectionLimit: 50,
    waitForConnections: true,
    maxPreparedStatements: 500,
    queueLimit: 0,
    dateStrings: true,
    keepAliveInitialDelay: 10000,
    enableKeepAlive: true
});

module.exports = poolCluster;

const poolCluster = require('../Config/DBConfig');

ExecuteSQL.js

const execSQLFC = async (sql, values) => {
    let connection;

    try {
        connection = await poolCluster.getConnection('FloorcareDB');
        await connection.query(`USE ${process.env.SQL_FCDB}`);

        console.log('Connected to FloorcareDB');
        const [dbCheck] = await connection.query('SELECT DATABASE() as currentDB');
        console.log('Current database:', dbCheck[0].currentDB);

        console.log('FloorcareDB');
        const [rows] = await connection.query(sql, values);
        connection.release();

        return rows;
    } catch (err) {
        if (connection) connection.release();
        console.error(err);
        return err;
    }
};

const execSQLTrace = async (sql, values) => {
    let connection;

    try {
        connection = await poolCluster.getConnection('TraceDB');
        await connection.query(`USE ${process.env.SQL_TRACEDB}`);

        console.log('Connected to TraceDB');
        const [dbCheck] = await connection.query('SELECT DATABASE() as currentDB');
        console.log('Current database:', dbCheck[0].currentDB);

        const [rows] = await connection.query(sql, values);
        connection.release();

        return rows;
    } catch (err) {
        if (connection) connection.release();
        console.error(err);
        return err;
    }
};

module.exports = { execSQLFC, execSQLTrace };

DatTN95 avatar Aug 21 '24 04:08 DatTN95