私はnodejs、knex、bookshelfなどにかなり慣れていないので、現在、ログインしているユーザーに基づいて別のmysqlデータベースに接続するWebアプリを開発しています.
最初の接続は正常に機能し、ログアウトしてサインアウト コードで knex.destroy() を実行します。再度ログインすると、
Unhandled rejection Error: There is no pool defined on the current client
一度破棄されたプールは、再初期化されても knex によって再作成されないようです。
誰もこれを試して、その方法を知っていますか?
データベースなしで初期化し、ユーザーがログインしたときにデータベースを追加しようとしましたが、接続がデータベースに接続していないようです。以前の接続を破棄せずに、データベースとの新しい接続をインスタンス化しようとしました。その結果、ユーザーは最初のユーザーのデータベースを使用します。接続を破棄すると、MySQL 接続が削除され、適切なデータベースとの新しい接続が確立されますが、明らかにプールはありません。
読むと、knexはこれを行うように設計されていないように見えますが、新しいプールとの新しい接続をインスタンス化する方法があるに違いありませんか?
私はパスポートローカルコードスニペットを使用しています
passport.use(new LocalStrategy({
usernameField: 'email',
passwordField: 'password'
},
function(email, password, done) {
new userModel.User({email: email}).fetch().then(function(data) {
var user = data;
if(user === null) {
return done(null, false, {message: 'Invalid username or password'});
} else {
user = data.toJSON();
if(!bcrypt.compareSync(password, user.password)) {
return done(null, false, {message: 'Invalid username or password'});
} else {
ctrl = new DB();
ctrl.connect(user.db);
dbModel = require('../server/models/dbModel');
return done(null, user);
}
}
});
}));
DB.js
function DB(){
}
DB.prototype.connect = function (db){
if (db !== "crm" && db !== null){
db = "crm-" + db;
}
DB.knex = require('knex')({
client: 'mysql',
connection:{
host: 'localhost', // your host
user: MYSQL_USR, // your database user
password: MYSQL_PWD, // your database password
database: db,
charset: 'UTF8_GENERAL_CI' //,
// debug : true
}
});
DB.bookshelf = require('bookshelf')(DB.knex);
};
DB.prototype.destroy = function (){
DB.knex.destroy().then(console.log("destroyed"));
};
module.exports = DB;
助けてください!他に必要なコードを教えてください。
誰かがこれをやったことがありますか?どうか、私は答えを持っていないか、見つけていません。