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).