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