Ich bin ziemlich neu zu Nodejs, Knex, Bücherregal usw. und derzeit entwickelt eine Webanwendung, die mit einer anderen MySQL-Datenbank verbinden würde basierend auf dem Benutzer angemeldet.Ich versuche, node.js und mysql verwenden, um eine Verbindung zu verschiedenen Datenbank pro Benutzer - vorzugsweise mit einem Pool
die erste Verbindung funktioniert gut, ich dann ausloggen und im Zeichen aus Code, den ich tue knex.destroy(). Wenn ich in mir ein bekommen anmelden zurück Unhandled rejection Error: There is no pool defined on the current client
Es scheint, dass Knex neu erstellen hat keinen Pool, sobald es sogar zerstört worden ist, wenn es neu initialisiert wird.
Hat jemand versucht, dies und wissen, wie es zu tun?
Ich habe versucht, ohne eine Datenbank zu initialisieren und einen zu addieren, wenn sich der Benutzer anmeldet, aber die Verbindung scheint sich dann nicht mit der Datenbank zu verbinden. Ich habe versucht, eine neue Verbindung mit der Datenbank zu erstellen, ohne die vorherige zu zerstören, was dazu führt, dass der Benutzer die Datenbank des ersten Benutzers verwendet. Destroying die Verbindung der MySQL-Verbindungen entfernt und stellt auch eine neue Verbindung mit der richtigen Datenbank aber anscheinend ohne Pool.
Aus dem Lesen sieht es aus wie Knex wurde nicht dafür entwickelt, aber sicherlich muss es eine Möglichkeit, eine neue Verbindung mit einem neuen Pool instanziieren?
Ich bin mit Pass-local Code-Schnipsel
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;
bitte helfen Sie folgen! lassen Sie mich wissen, welchen anderen Code Sie möglicherweise benötigen.
Hat jemand das schon gemacht und wenn ja wie? Bitte, ich habe keine Antworten gefunden oder gefunden.
Ist die Anzahl der Datenbanken auf Fest verbinden und vor der Zeit bekannt? – HeadCode
Was bedeuten unterschiedliche Datenbanken pro Benutzer? Wie Benutzernamen, die mit einem ... m begonnen haben, und die anderen Datenbanken sind für n ... z oder meinst du, das Benutzermodell verwendet eine Datenbank und die anderen Modelle verwenden ein anderes?Oder verwenden alle anderen Modelle eine andere Datenbank pro Benutzer? – JTWebMan
Jeder Benutzer hat eine Datenbank für seine Daten. Wenn er sich anmeldet, sollte er auf seine Datenbank zugreifen können. – Peter