Navrhuji poskytnout dokumentaci sdružování důkladné čtení.
Řekli jste, že používáte conn.changeUser(/*...*/) , ale pak jste řekli, že používáte const conn = mysql.createPool(/*...*/); k inicializaci tohoto conn konstantní. To znamená conn je pool , není spojení; není divu, že nemá changeUser metoda.
Pokud chcete změnit databázi, musíte to udělat na připojení, ne na fondu. Místo použití zkratky pool.query formuláře, udělali byste pool.getConnection /conn.changeUser /conn.query /conn.release . Nejprve zavolejte svou proměnnou pool , nikoli conn :
const pool = mysql.createPool({
pak
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();
});
});
To bylo řečeno , kdybych to byl já, byl bych pohodlnější mít fond připojení na databázi, spíše než společný fond, kde měníte databázi. To by mohla být z mé strany čistá paranoia, ale já bych to udělal. Ale pokud nepoužíváte samostatné fondy, doporučuji vždy provést changeUser abyste si byli jisti, jakou databázi používáte, nebo důkladně otestujte abyste viděli, co je mysql modul to zvládne (a opakujte toto testování při každém vydání modulu, pokud správce nezdokumentuje chování).