/ / Exportiere und verwende meine Mungoverbindung über mehrere Modelle hinweg - node.js, mongodb, mongoose

Exportieren und Wiederverwendung meiner Mungoverbindung über mehrere Modelle hinweg - node.js, mongodb, mongoose

Ich habe eine Verzeichnisstruktur

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

Beide Modelle stellen über Mungo eine Verbindung mit derselben MongoDB-Instanz her, definieren jedoch unterschiedliche 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);

});

Wie kann die Datenbankverbindung am besten einmal erstellt und für jedes Modell erneut verwendet werden? Was ist die beste Verzeichnisstruktur? Könnte sein ./lib/middleware/db.js?

Diese Frage scheint relevant zu sein, aber es wird das mongodb npm Modul anstelle von mongoose verwendet, die Frage ist unklar und alle Kommentare des Autors wurden gelöscht.

Antworten:

10 für die Antwort № 1

Du solltest nur anrufen mongoose.connect einmal im Startcode Ihrer Anwendung. Dadurch wird der Standardverbindungspool für Ihre Anwendung erstellt.

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

Also wird es tatsächlich von Mongoose für Sie erledigt.


8 für die Antwort № 2

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 benutze 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...");
});