db
変数をグローバルにすることなく、ルータ/コントローラで以下のスニペット(db
変数)でデータベース接続を共有する最も適切な方法は何ですか? PHPの背景から来るnode.jsでオブジェクトを共有してグローバルを避ける
var mongo = require('mongoskin'),
db = mongo.db(config.db.adress);
app.use(function(req, res, next) {
db.open(function(err, data) {
(err) ? res.send('Internal server error', 500) : next();
});
});
// Setting up controllers here
app.post('/users', require('./controllers/users').create);
、私は約依存性の注入を考えるようになったが、それはノードに適切なだ場合、私は考えています。
私は問題を見ません?あなたの例では、すでに内部関数の中で利用可能です。関数をインラインで指定せず、代わりに別のモジュールからインポートした場合は、その関数にパラメータとして渡します。すでに例に示したようにanonymous fnの中にその(外部)fnを呼び出すこともできます。 –
編集後:パラメータとして "require" -dファイルから呼び出された関数に与えます(実際には、モジュールのグローバル変数を設定してそのモジュールの他の関数を記憶させるなど)。または、DBアクセスを必要とするすべての関数にパラメータとして渡します。これは、とにかく、よりクリーンなプログラミング(ポイントまで)です。 –
まあ、混乱のために申し訳ありません。私は私のルート/コントローラセットアップの例を含むように私の質問のコードを更新しました。エラー処理に問題はありませんが、 'db'オブジェクトを' users'コントローラの内部からアクセスするために、この場合は 'db'をグローバルにする必要はありません。 – Industrial