Proponuję przekazać dokumentację łączenia dokładna lektura.
Powiedziałeś, że używasz conn.changeUser(/*...*/)
, ale powiedziałeś, że używasz const conn = mysql.createPool(/*...*/);
aby zainicjować ten conn
stały. Oznacza to conn
to pula , a nie połączenie; nic dziwnego, że nie ma changeUser
metoda.
Jeśli chcesz zmienić bazę danych, musisz to zrobić na połączeniu, a nie w puli. Zamiast używać skrótu pool.query
formularz, zrobisz pool.getConnection
/conn.changeUser
/conn.query
/conn.release
. Najpierw wywołaj zmienną pool
, a nie conn
:
const pool = mysql.createPool({
wtedy
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();
});
});
To powiedział , gdybym to był ja, wygodniej byłoby mieć pulę połączeń na bazę danych, a nie wspólną pulę, w której zmieniasz bazę danych. To mogłaby być czysta paranoja z mojej strony, ale tak bym zrobiła. Ale jeśli nie używasz oddzielnych pul, sugeruję zawsze wykonywać changeUser
więc masz pewność, jakiej bazy danych używasz, lub przetestuj dokładnie aby zobaczyć, co mysql
moduł zajmuje się tym (i powtarza to testowanie przy każdym wydaniu modułu z kropką, chyba że opiekun dokumentuje zachowanie).