2016-04-08 6 views
0

質問はアーキテクチャについてです。
私はmongodbへの接続を確立し、スキーマ、モデルなどを持つクラスを持っているモジュール 'db'を取得しました。私はそのクラスの標本をエクスポートします。
私はちょうどすべてのルートファイルに( 'DB')を必要とするか、またはちょうど1でこれを実行する必要があります。ノードjs、どこでも必要とするかreqにプロパティを追加する

server.on('request', function(req) { 
    req.db = db; 
}); 

db.js:

"use strict"; 
var mongoose = require('mongoose'); 
mongoose.connect('mongodb://localhost/test'); 
var conn = mongoose.connection; 
conn.on('error', console.error.bind(console, 'connection error:')); 
conn.once('open', function() { 
    console.log("Connected to MongoDB."); 
}); 

class db { 
    constructor() { 
    //Users 
    this._usersSchema = mongoose.Schema(
     { 
     username: String, 
     password: String, 
     email: String 
     }); 
    this.Users = mongoose.model("Users", this._usersSchema); 
    } 
} 

module.exports = new db(); 
+0

dbモジュールによって異なります。あなたがそれを必要とするたびに同じインスタンスを再利用する場合、インスタンス化するだけで済みます。あなたがそれを渡すことができない場合。あなたはしかし、より多くの情報を与える必要があります。 –

+0

モジュール – Angels

+0

に関する情報を追加しました。mongooseを使用すると、db接続を渡す必要はありません。スキーマモデルを使用してデータベースとやり取りしてください。モジュールは残りの部分を処理します。 –

答えて

3

私はあなたが異なった意見を見つけるだろうと思うが、I私が必要とするところでrequireを好む。ノード内のmodulesはシングルトンなので、常に同じインスタンスを取得しています。私は自分のコントローラのロジックをルートから離れた自分のファイルに分けたい。さらに、ロジックは完全な要求および応答オブジェクトを期待しません。その理由は、同じコードを使用して、APIエンドポイントにサービスを提供するために必要なデータを取得したり、リクエストと応答オブジェクト全体を模擬しなくてもビューをサーバー側にレンダリングすることができるからです。

関連する問題