Ik raad aan om de poolingdocumentatie te geven een grondige lezing.
Je hebt gezegd dat je conn.changeUser(/*...*/)
gebruikt , maar dan heb je gezegd dat je const conn = mysql.createPool(/*...*/);
gebruikt om die conn
. te initialiseren constante. Dat betekent conn
is een pool , geen verbinding; het is niet verwonderlijk dat het geen changeUser
. heeft methode.
Als u de database wilt wijzigen, moet u dit doen op de verbinding, niet op de pool. In plaats van de afkorting pool.query
. te gebruiken formulier, zou u pool.getConnection
. doen /conn.changeUser
/conn.query
/conn.release
. Roep eerst uw variabele pool
aan , niet conn
:
const pool = mysql.createPool({
dan
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();
});
});
Dat gezegd hebbende , als ik het was, zou ik meer op mijn gemak zijn met een verbindingspool per database, in plaats van een gemeenschappelijke pool waarin u de database wijzigt. Dat zou pure paranoia van mijn kant kunnen zijn, maar het is wat ik zou doen. Maar als je geen aparte pools gebruikt, raad ik aan om altijd de changeUser
. te doen zodat u zeker weet welke database u gebruikt, of test grondig om te zien wat de mysql
module doet om dit aan te pakken (en herhaal die testen bij elke dot-release van de module, tenzij de beheerder het gedrag documenteert).