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