Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wechseln Sie die Datenbank in einem Verbindungspool in nodejs MySQL

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