2014-04-25 15 views
5

ho una struttura di directoryExport e riutilizzare la mia connessione mangusta su più modelli

./lib 
./lib/model1.js 
./lib/model2.js 

Entrambi i modelli si collegano alla stessa istanza MongoDB usando mangusta, ma definire diversi modelli:

// model1.js 
var mongoose = require ('mongoose'); 
mongoose.connect ('bla') 
var db = mongoose.connection; 

var schema1, model1; 

db.on('error', console.error.bind(console, 'database, why you no connect?')); 

db.once('open', function callback() { 

    schema1 = mongoose.Schema({ 
    // some properties 
    }); 

    model1 = mongoose.model1 ('model1', schema1); 

}); 

Qual è il modo migliore per creare una volta la connessione al database e riutilizzarla per ciascuno dei modelli? Qual è la migliore struttura di directory? Forse ./lib/middleware/db.js?

This question sembra rilevante ma sta usando il modulo mongodb npm invece di mangusta, la domanda non è chiara e tutti i commenti dell'autore sono stati cancellati.

risposta

9

Si dovrebbe chiamare solo mongoose.connect una volta, nel codice di avvio dell'applicazione. Ciò creerà il pool di connessione predefinito per la tua applicazione.

I file model1.js e model2.js creano i loro modelli tramite chiamate a mongoose.model che li associa alla connessione predefinita.

Quindi in realtà è gestito per te da Mongoose.

+2

Quindi @JohnnyHK, voglio solo verificare qualcosa. Stai dicendo che le persone non devono davvero esportare l'oggetto mangusta ovunque si connettono ai loro dbs poiché hanno sempre lo stesso oggetto in tutto il codice quando usano semplicemente l'istruzione require ('mangusta')? – alaboudi

+2

@alaboudi Questo è corretto. – JohnnyHK

7

In ./app.js:

var mongoose = require('mongoose'); 
mongoose.connect('connStr'); //connect once 

In ./lib/model1.js:

var mongoose = require('mongoose'); 
var model1 = mongoose.model('model1', { 
    foo1: { type: String, required: false}, 
    bar1: { type: String, required: false} 
}); 
module.exports = model1; 

In ./lib/model2.js:

var mongoose = require('mongoose'); 
var model2 = mongoose.model('model2', { 
    foo2: { type: String, required: false}, 
    bar2: { type: String, required: false} 
}); 
module.exports = model2; 

Quindi utilizza questo modello come questo (In ./routes.js per esempio):

var model1 = require('./lib/model1.js'); 
var m1 = new model1({ 
    foo: 'value_for_foo', 
    bar: 'value_for_bar' 
}); 

m1.save(function (err) { 
    if (err) {console.log(err.stack);}  
    console.log('saving done...'); 
}); 
+1

e se ho più connessioni? mangusta non funziona più –

+0

@badrslaoui Si prega di fare riferimento a questo SO risposta: http://stackoverflow.com/a/19475259/2013487 –

+0

Commentando sul thread vecchio, ma questo non sembra funzionare più. Qualche idea su come farlo ora? – iWillBeMaster

Problemi correlati