Ich habe gelesen und gelesen und bin immer noch verwirrt darüber, wie ich dieselbe Datenbankverbindung (MongoDb) am besten für die gesamte NodeJs-App freigeben kann. Soweit ich weiß, sollte die Verbindung offen sein, wenn die App gestartet und zwischen Modulen wiederverwendet wird. Meine derzeitige Idee des besten Weges ist, dass server.js
(Hauptdatei, in der alles beginnt) eine Verbindung zur Datenbank hergestellt und eine Objektvariable erstellt wird, die an Module übergeben wird. Sobald die Verbindung hergestellt ist, wird diese Variable nach Bedarf vom Modulcode verwendet, und diese Verbindung bleibt offen. Z.B:
var MongoClient = require('mongodb').MongoClient;
var mongo = {}; // this is passed to modules and code
MongoClient.connect("mongodb://localhost:27017/marankings", function(err, db) {
if (!err) {
console.log("We are connected");
// these tables will be passed to modules as part of mongo object
mongo.dbUsers = db.collection("users");
mongo.dbDisciplines = db.collection("disciplines");
console.log("aaa " + users.getAll()); // displays object and this can be used from inside modules
} else
console.log(err);
});
var users = new(require("./models/user"))(app, mongo);
console.log("bbb " + users.getAll()); // not connected at the very first time so displays undefined
dann models/user
sieht ein anderes Modul so aus:
Users = function(app, mongo) {
Users.prototype.addUser = function() {
console.log("add user");
}
Users.prototype.getAll = function() {
return "all users " + mongo.dbUsers;
}
}
module.exports = Users;
Jetzt habe ich das schreckliche Gefühl, dass dies falsch ist. Gibt es also offensichtliche Probleme mit diesem Ansatz und wenn ja, wie kann ich ihn verbessern?
module.exports = mongoist(connectionString);
. (Lesen Sie mehr darüber connectionString
im MongoDB-Handbuch.)