Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Alternar banco de dados em um pool de conexões no nodejs MySQL


Sugiro fornecer a documentação de pool uma leitura completa.

Você disse que está usando conn.changeUser(/*...*/) , mas você disse que está usando const conn = mysql.createPool(/*...*/); para inicializar esse conn constante. Isso significa conn é um pool , não uma conexão; não é surpreendente que não tenha um changeUser método.

Se você quiser alterar o banco de dados, precisará fazê-lo na conexão, não no pool. Em vez de usar a abreviação pool.query formulário, você faria pool.getConnection /conn.changeUser /conn.query /conn.release . Primeiro, chame sua variável pool , não conn :
const pool = mysql.createPool({

então
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();
    });
});

Dito isso , se fosse eu, ficaria mais confortável em ter um pool de conexões por banco de dados, em vez de um pool comum onde você altera o banco de dados. Isso pode ser pura paranóia da minha parte, mas é o que eu faria. Mas se você não usa pools separados, sugiro sempre fazer o changeUser para ter certeza de qual banco de dados está usando ou teste completamente para ver o que o mysql module faz para lidar com isso (e repita esse teste em cada lançamento do módulo, a menos que o mantenedor documente o comportamento).