sql >> Databasteknik >  >> RDS >> Mysql

Byt databas i en anslutningspool i nodejs MySQL

Jag föreslår att du ger poolningsdokumentationen en grundlig läsning.

Du har sagt att du använder conn.changeUser(/*...*/) , men då har du sagt att du använder const conn = mysql.createPool(/*...*/); för att initiera den conn konstant. Det betyder conn är en pool , inte en anslutning; det är inte förvånande att den inte har en changeUser metod.

Om du vill byta databas måste du göra det på anslutningen, inte poolen. Istället för att använda förkortningen pool.query form skulle du göra pool.getConnection /conn.changeUser /conn.query /conn.release . Anrop först din variabel pool , inte conn :

const pool = mysql.createPool({

sedan

pool.getConnection(function(err, conn) {
    if (err) {
        // handle/report error
        return;
    }
    conn.changeUser({
        database: req.session.dbname
    }, function (err) {
        if (err) {
            // handle/report error
            return;
        }
        // Use the updated connection here, eventually
        // release it:
        conn.release();
    });
});

Så sagt , om det var jag, skulle jag vara mer bekväm med en anslutningspool per databas, snarare än en gemensam pool där du ändrar databasen. Det kan vara ren paranoia från min sida, men det är vad jag skulle göra. Men om du inte använder separata pooler, föreslår jag att du alltid gör changeUser så att du är säker på vilken databas du använder, eller testa grundligt för att se vad mysql modulen gör för att hantera detta (och upprepa testet på varje punktutgåva av modulen, om inte underhållaren dokumenterar beteendet).




  1. Hur definierar man en trigger ON COMMIT i Oracle?

  2. Importera en CSV-fil till SQL Server med SqlBulkCopy

  3. Topp 9 databashanteringssystem för Joomlas mallar

  4. MariaDB CURRENT_DATE() Förklarad