私はnodejs/mongodbアプリケーションで 'mongodb'モジュールを使って作業しています。アプリケーションはグローバル変数を使用してモジュール間でdbを共有する
node main.js
で起動します。私はdbに接続し、接続を 'db'グローバル変数に保持します。 'db'は、 'server'の内部メソッドで使用されます。私はグローバル変数として 'db'を持つことを避けたいが、正しい方法を見つけられなかった。
私の現在のmain.js:
var server = require('./lib/server');
var MongoClient = require('mongodb').MongoClient;
var Server = require('mongodb').Server;
var mongoClient = new MongoClient(new Server(HOST, PORT));
db = null;
// Database connection
mongoClient.open(function(err, mongoClient) {
if(!err){
// Database selection
db = mongoClient.db(DB);
// Launch web server
server.start(); // usage of 'db' in this part
} else {
console.log(err.message);
process.exit(1);
}
});
きれいな方法の任意のアイデア?
UPDATE
私は最終的にconnection.jsでモジュールを作成しました:
var config = require('../config/config');
var url = 'mongodb://' + config.db.host + ':' + config.db.port + '/' + config.db.name;
var MongoClient = require('mongodb').MongoClient;
var db = null;
module.exports = function(cb){
if(db){
cb(db);
return;
}
MongoClient.connect(url, function(err, conn) {
if(err){
console.log(err.message);
throw new Error(err);
} else {
db = conn;
cb(db);
}
});
}
私は呼んで接続を取得する必要があるたびに:
var connection = require('./connection');
connection(function(db){
// doing some stuff with the db
});
これは非常に取り組んでいますよく
この方法で問題が発生する可能性はありますか?
コンストラクタ(コンストラクタ依存関係インジェクション)でそれを使用しているモジュールに渡すか、そのインスタンスを含むモジュールを持っていて、他のモジュールがそれを必要とするモジュールを持っていて、dbインスタンスと必要なその他のサービス悪い) –
本当にグローバルに留まるつもりならば、代わりに 'global.db'を使うよう指示します。少なくとも、無効なJSではありません。 – gustavohenke
私はこのグローバルを取り除きたいと思っています:) – Luc