Mysql
 sql >> Database >  >> RDS >> Mysql

Cambia database in un pool di connessioni in nodejs MySQL

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