sql >> Database teknologi >  >> RDS >> Mysql

Skift database i en forbindelsespulje i nodejs MySQL

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




  1. MySQL:hvorfor varchar(254) og ikke varchar(255)?

  2. 19.3 PDB Luk ORA-65107 ORA-16078

  3. Hvordan opretter man en generisk enhedsmodelklasse, der understøtter generisk id inklusive autogenererede id'er?

  4. Sådan fjerner du dublerede rækker i SQL