Suggerisco di fornire la documentazione di pooling una lettura approfondita.
Hai detto che stai usando conn.changeUser(/*...*/)
, ma poi hai detto che stai usando const conn = mysql.createPool(/*...*/);
per inizializzare quel conn
costante. Ciò significa conn
è un pool , non una connessione; non sorprende che non abbia un changeUser
metodo.
Se vuoi cambiare il database, devi farlo sulla connessione, non sul pool. Invece di usare l'abbreviazione pool.query
modulo, faresti pool.getConnection
/conn.changeUser
/conn.query
/conn.release
. Per prima cosa, chiama la tua variabile pool
, non conn
:
const pool = mysql.createPool({
poi
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();
});
});
Detto questo , se fossi in me, mi sentirei più a mio agio ad avere un pool di connessioni per database, piuttosto che un pool comune in cui si modifica il database. Potrebbe essere pura paranoia da parte mia, ma è quello che farei. Ma se non usi pool separati, ti suggerisco di fare sempre changeUser
quindi sei sicuro del database che stai utilizzando o testalo approfondito per vedere cosa è il mysql
module fa per gestire questo (e ripetere quel test su ogni rilascio di punti del modulo, a meno che il manutentore non documenti il comportamento).