Sono abbastanza nuovo per nodejs, knex, bookshelf ecc e sto attualmente sviluppando un'applicazione web che si connetterà a un diverso database mysql in base al quale l'utente ha effettuato il login.tentativo di utilizzare node.js e mysql per connettersi a database diversi per utente - preferibilmente utilizzando un pool
La prima connessione funziona correttamente, quindi esco dal logout e nel codice di disconnessione faccio knex.destroy(). Quando vado a riaccedere ottengo un Unhandled rejection Error: There is no pool defined on the current client
Sembra che knex non ricrea una piscina una volta che è stata distrutta, anche se viene reinizializzata.
Qualcuno ha provato questo e sa come farlo?
Ho provato a inizializzare senza un database e ad aggiungerne uno quando l'utente effettua l'accesso ma la connessione non sembra quindi connettersi al database. Ho provato a creare un'istanza di una nuova connessione con il database senza distruggere il precedente, il che si traduce in un utente che utilizza il primo database dell'utente. Distruggere la connessione rimuove le connessioni MySQL e stabilisce anche una nuova connessione con il database giusto ma apparentemente nessun pool.
Dalla lettura sembra che Knex non sia stato progettato per farlo, ma sicuramente ci deve essere un modo per creare una nuova connessione con un nuovo pool?
sto usando il passaporto locale frammenti di codice seguono
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;
favore aiuto! fammi sapere di quale altro codice potresti aver bisogno.
Qualcuno ha mai fatto questo e se sì, come? Per favore, non ho avuto o trovato alcuna risposta.
Il numero di database da collegare a fisso e conosciuto in anticipo? – HeadCode
Cosa si intende per database diversi per utente? Come i nomi utente che sono iniziati con un ... me gli altri database è per n ... z vuoi dire che il modello degli utenti usa un database e gli altri modelli ne usano un altro?Oppure tutti gli altri modelli utilizzano un database diverso per utente? – JTWebMan
ogni utente ha un database per i propri dati, quando accedono dovrebbero essere in grado di accedere al proprio database. – Peter