Я довольно новичок в nodejs, knex, bookshelf и т. Д., И в настоящее время я разрабатываю веб-приложение, которое будет подключаться к другой базе данных mysql на основании которого пользователь вошел в систему.пытается использовать node.js и mysql для подключения к другой базе данных для каждого пользователя - желательно с использованием пула
Первое соединение работает нормально, затем я выхожу из системы и выхожу из кода, который я делаю 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;
, пожалуйста, помогите! дайте мне знать, какой другой код вам может понадобиться.
Кто-нибудь когда-либо делал это, и если да, то как? Пожалуйста, у меня не было или не было ответов.
Является ли количество баз данных для подключения к фиксированным и известным заблаговременно? – HeadCode
Что означают разные базы данных для пользователя? Как и имена пользователей, которые начинались с ... m, а другие базы данных для n ... z или вы имеете в виду, что модель пользователей использует одну базу данных, а другие модели используют другую?Или все другие модели используют другую базу данных для каждого пользователя? – JTWebMan
каждый пользователь имеет базу данных для своих данных, при входе в систему они должны иметь доступ к своей базе данных. – Peter