私は 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を使用しています)?
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日前にモジュールのエクスポートに頭を悩ませ始めたばかりです)、機能します。これが良い方法であるかどうか誰かがコメントできるかもしれません。
commonjsのエクスポートに従う場合
exports.mongoose = mongoose
モジュール名がconnection.jsだとしましょう
あなたが要求することができます
var mongoose = require('connection.js')
マングース接続を使用できます
私は通常、モデルをこのようにラップします
_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はかなり新しいです。
これがお役に立てば幸いです。