プーリングドキュメント を提供することをお勧めします よく読んでください。
conn.changeUser(/*...*/)
を使用しているとのことです 、しかし、あなたはconst conn = mysql.createPool(/*...*/);
を使用していると言いました そのconn
を初期化します 絶え間ない。つまり、conn
プールです 、接続ではありません。 changeUser
がないのも当然です メソッド。
データベースを変更する場合は、プールではなく接続で変更する必要があります。省略形のpool.query
を使用する代わりに フォームでは、pool.getConnection
を実行します /conn.changeUser
/conn.query
/conn.release
。まず、変数pool
を呼び出します 、conn
ではありません :
const pool = mysql.createPool({
次に
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();
});
});
そうです 、もし私なら、データベースを変更する共通のプールよりも、データベースごとに接続プールを使用する方が快適です。それは私の側では純粋なパラノイアかもしれませんが、それは私がすることです。ただし、個別のプールを使用しない場合は、常にchangeUser
を実行することをお勧めします。 したがって、使用しているデータベースを確認するか、徹底的にテストしてください。 mysql
が何であるかを確認する モジュールはこれを処理します(そして、メンテナが動作を文書化しない限り、モジュールのすべてのドットリリースでそのテストを繰り返します)。