Ich schlage vor, die Pooling-Dokumentation bereitzustellen eine gründliche Lektüre.
Sie sagten, Sie verwenden conn.changeUser(/*...*/)
, aber dann haben Sie gesagt, dass Sie const conn = mysql.createPool(/*...*/);
verwenden um diese conn
zu initialisieren Konstante. Das bedeutet conn
ist ein Pool , keine Verbindung; es ist nicht verwunderlich, dass es keinen changeUser
gibt Methode.
Wenn Sie die Datenbank ändern möchten, müssen Sie dies über die Verbindung tun, nicht über den Pool. Anstatt die Abkürzung pool.query
zu verwenden Form, würden Sie pool.getConnection
ausführen /conn.changeUser
/conn.query
/conn.release
. Rufen Sie zuerst Ihre Variable pool
auf , nicht conn
:
const pool = mysql.createPool({
dann
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();
});
});
Das sagte , wenn ich es wäre, wäre es mir angenehmer, einen Verbindungspool pro Datenbank zu haben, als einen gemeinsamen Pool, in dem Sie die Datenbank ändern. Das könnte reine Paranoia meinerseits sein, aber ich würde es tun. Aber wenn Sie keine separaten Pools verwenden, schlage ich vor, immer den changeUser
zu machen damit Sie sicher sind, welche Datenbank Sie verwenden, oder ausgiebig testen um zu sehen, was die mysql
Modul tut, um damit umzugehen (und wiederholen Sie diesen Test bei jeder Dot-Version des Moduls, es sei denn, der Betreuer dokumentiert das Verhalten).