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