2014-04-25 12 views
5

ich eine VerzeichnisstrukturExport und meine Mungo Verbindung über mehrere Modelle wiederverwenden

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

Beide Modelle auf den gleichen MongoDB-Instanz mit Mungo verbinden, sondern definieren verschiedene Modelle:

// 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); 

}); 

Was das ist beste Methode, um die Datenbankverbindung einmal zu erstellen und für jedes der Modelle wiederzuverwenden? Was ist die beste Verzeichnisstruktur? Vielleicht ./lib/middleware/db.js?

This question scheint relevant, aber es ist mit dem Mongodb npm Modul statt Mungo, die Frage ist unklar, und alle Kommentare des Autors wurden gelöscht.

Antwort

9

Sie sollten nur mongoose.connect einmal anrufen, in Startcode Ihrer Anwendung. Dadurch wird der Standardverbindungspool für Ihre Anwendung erstellt.

Ihre Dateien model1.js und model2.js erstellen ihre Modelle über Aufrufe an mongoose.model, die sie an die Standardverbindung bindet.

So wird es eigentlich von Mongoose für Sie behandelt.

+2

Also @JohnnyHK, ich möchte nur etwas überprüfen. Willst du damit sagen, dass Leute das Mungo-Objekt nicht wirklich exportieren müssen, wo auch immer sie sich mit ihren dbs verbinden, da sie immer das gleiche Objekt im ganzen Code haben, wenn sie einfach die require ('mongoose') Anweisung benutzen? – alaboudi

+2

@alaboudi Das ist richtig. – 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; 

Dann verwenden Sie dieses Modell wie folgt (In ./routes.js zum Beispiel):

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

was ist, wenn ich mehrere Verbindungen habe? Mungo funktioniert nicht mehr –

+0

@badrslaoui finden Sie in diesem SO answear: http://stackoverflow.com/a/19475259/2013487 –

+0

auf alten Thread kommentierte aber dieses scheint nicht mehr zu funktionieren. Irgendeine Idee, wie man es jetzt macht? – iWillBeMaster

Verwandte Themen