プーリングドキュメント を提供することをお勧めします よく読んでください。
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が何であるかを確認する モジュールはこれを処理します(そして、メンテナが動作を文書化しない限り、モジュールのすべてのドットリリースでそのテストを繰り返します)。