Jeg foreslår at give poolingdokumentation en grundig læsning.
Du har sagt, at du bruger conn.changeUser(/*...*/)
, men så har du sagt, at du bruger const conn = mysql.createPool(/*...*/);
for at initialisere den conn
konstant. Det betyder conn
er en pulje , ikke en forbindelse; det er ikke overraskende, at det ikke har en changeUser
metode.
Hvis du vil ændre database, skal du gøre det på forbindelsen, ikke poolen. I stedet for at bruge stenografien pool.query
formular, ville du gøre pool.getConnection
/conn.changeUser
/conn.query
/conn.release
. Kald først din variabel pool
, ikke conn
:
const pool = mysql.createPool({
derefter
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();
});
});
Når det er sagt , hvis det var mig, ville jeg være mere tryg ved at have en forbindelsespulje pr. database i stedet for en fælles pool, hvor du ændrer databasen. Det kunne være ren paranoia fra min side, men det er hvad jeg ville gøre. Men hvis du ikke bruger separate puljer, foreslår jeg, at du altid gør changeUser
så du er sikker på, hvilken database du bruger, eller test omhyggeligt for at se, hvad mysql
modul gør for at håndtere dette (og gentag denne test på hver punktudgivelse af modulet, medmindre vedligeholderen dokumenterer adfærden).