web-dev-qa-db-ja.com

データベース接続パラメータをmongoose / node.jsと共有するための最良の方法

私は Mongoose を使用してMongoデータベースを管理しています。私の接続ファイルは非常に単純です:

var mongoose = require('mongoose')

mongoose.connection.on("open", function(){
  console.log("Connection opened to mongodb at %s", config.db.uri)
});
console.log("Connecting to %s", config.db.uri)
mongoose.connect(config.db.uri)

global.mongoose = mongoose

それから私のapp.jsで私はちょうど

require('./database)

「マングース」変数はグローバルに利用できます。グローバルを使用したくない(少なくとも直接ではない)。シングルトンパターンまたは他の方法でノード間でデータベース接続変数を共有するより良い方法はありますか(私はexpress.jsを使用しています)?

22
typeoneerror

App.jsファイルで次のことを行うだけです。

var mongoose = require('mongoose');
mongoose.connect('mongodb://address_to_Host:port/db_name');
modelSchema = require('./models/yourmodelname').YourModelName;
mongoose.model('YourModelName', modelSchema);
// TODO: write the mongoose.model(...) command for any other models you have.

この時点で、そのモデルへのアクセスが必要なファイルは次のことができます。

var mongoose = require('mongoose');
YourModelName = mongoose.model('YourModelName');

そして最後に、モデルで、ファイルを通常どおりに書き込んでから、下部にエクスポートできます。

module.exports.YourModelName = YourModelName;

これが最良の最も素晴らしい解決策であるかどうかはわかりませんが(約2日前にモジュールのエクスポートに頭を悩ませ始めたばかりです)、機能します。これが良い方法であるかどうか誰かがコメントできるかもしれません。

29
AntelopeSalad

commonjsのエクスポートに従う場合

exports.mongoose = mongoose

モジュール名がconnection.jsだとしましょう

あなたが要求することができます

   var mongoose = require('connection.js')

マングース接続を使用できます

6
Subba Rao

私は通常、モデルをこのようにラップします

_var MySchema = (function(){
//Other schema stuff 

//Public methods
GetIdentifier = function() {
return Id;
};

GetSchema = function() {
return UserSchema;
};

return this;
})();

if (typeof module !== 'undefined' && module.exports) {
exports.Schema  = MySchema;
}
_

そして私のメインクラスでは、これをvar schema = require('./schema.js').Schema;して、conn.model(schema.GetIdentifier(), schema.GetSchema())を呼び出します。もちろん、connectまたはcreateConnectionを呼び出した後です。これにより、スキーマを標準のメソッドセットにプラグインできます。接続とエラー処理をマスターした後、スキーマに集中できるため、この一般化は適切です。また、プラグインを使用してスキーマを拡張します。これにより、プラグインを他のスキーマと共有できます。

誰かがこれをうまくやっているかどうかを探していましたが、良いパターンを見つけることができず、Mongoはかなり新しいです。

これがお役に立てば幸いです。

2
Ovais Reza