Mysql
 sql >> Base de données >  >> RDS >> Mysql

Basculer la base de données dans un pool de connexions dans nodejs MySQL

Je suggère de donner la documentation de pooling une lecture approfondie.

Vous avez dit que vous utilisez conn.changeUser(/*...*/) , mais vous avez dit que vous utilisez const conn = mysql.createPool(/*...*/); pour initialiser ce conn constante. Cela signifie conn est une piscine , pas une connexion ; il n'est pas surprenant qu'il n'ait pas de changeUser méthode.

Si vous voulez changer de base de données, vous devez le faire sur la connexion, pas sur le pool. Au lieu d'utiliser le raccourci pool.query formulaire, vous feriez pool.getConnection /conn.changeUser /conn.query /conn.release . Tout d'abord, appelez votre variable pool , pas conn :

const pool = mysql.createPool({

alors

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();
    });
});

Cela dit , si c'était moi, je serais plus à l'aise d'avoir un pool de connexion par base de données, plutôt qu'un pool commun où vous modifiez la base de données. Ça pourrait être de la pure paranoïa de ma part, mais c'est ce que je ferais. Mais si vous n'utilisez pas de pools séparés, je suggère de toujours faire le changeUser pour être sûr de la base de données que vous utilisez, ou testez à fond pour voir ce que le mysql module fait pour gérer cela (et répétez ce test à chaque version de point du module, à moins que le responsable ne documente le comportement).