私は何度も読んでいますが、NodeJアプリ全体で同じデータベース(MongoDb)接続を共有するための最良の方法は何なのか混乱しています。私が理解しているように、アプリの起動時に接続を開いてモジュール間で再利用する必要があります。私の現在の最良の方法のアイデアは、server.js
(すべてが始まるメインファイル)データベースに接続し、モジュールに渡されるオブジェクト変数を作成することです。接続されると、この変数は必要に応じてモジュールコードによって使用され、この接続は開いたままになります。例えば:
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
次に、別のモジュールmodels/user
は次のようになります。
Users = function(app, mongo) {
Users.prototype.addUser = function() {
console.log("add user");
}
Users.prototype.getAll = function() {
return "all users " + mongo.dbUsers;
}
}
module.exports = Users;
今私はこれが間違っているという恐ろしい気持ちを持っていますので、このアプローチには明らかな問題がありますか?
module.exports = mongoist(connectionString);
です。(connectionString
MongoDBマニュアルを参照してください。)