node-mongodb-nativeラッパーの周りにおそらく最小のラッパーを書きました。でも、改善が必要だと思います。とても小さいので、ここに快適に収まります。
function MongoWrapper() {
this.db = null;
};
var mongoWrapper;
module.exports = exports = mongoWrapper = new MongoWrapper;
// This means that you can do `new include('mongoWrapper').MongoWrapper()`
mongoWrapper.MongoWrapper = MongoWrapper;
// ObjectId is the most handy method of all. This will work with
// native BSON or Pure BSON
mongoWrapper.ObjectId = function() {
if (!mongo.BSONNative || !mongo.BSONNative.ObjectID) {
return function(id) {
return mongo.BSONPure.ObjectID.createFromHexString(id);
};
}
return function(id) {
return new mongo.BSONNative.ObjectID(id);
};
}();
MongoWrapper.prototype.connect = function(url, options, cb ){
var that = this;
var MongoClient = mongo.MongoClient;
MongoClient.connect( url, function( err, db ){
if( err ) {
console.log( err );
} else {
that.db = db;
}
cb( err, db );
});
}
さて...これに関する「問題」は、サーバー全体をコールバックでラップする必要があることです。
mw.connect('mongodb://localhost/hotplate', {}, function( err, db ){
app.configure(function(){
app.set('port', process.env.PORT || 3000);
app.set('views', __dirname + '/views');
...
app.use(express.session({
// secret: settings.cookie_secret,
secret: 'woodchucks are nasty animals',
store: new MongoStore({
// db: settings.db
// db: hotplate.get('db').client
db: db
})
}));
他のドライバー(Mongoose、さらにはmongojsなど)は、コールバックの使用を強制しないように管理しています。私は彼らのコードを見ました、そして...まあ、私はそれを完全に理解しませんでした。特にMongojsは約束のためにライブラリを使用しているようですが、私はそれを理解するのに苦労しています。express.session
たとえば、パラメータとして、完全に機能する接続が必要であることに注意してください(これは私がここで行うことです)。接続を使用しないと、実際に接続が設定されるかどうかを確認することはできません。
だから:コールバックの必要性を取り除くための最も簡単な方法は何ですか?
基本的な考え方は、mongodb API呼び出しを「複製」し、「db」変数が設定されていない可能性を処理するコードでそれらをラップすることだと思います。しかし...それはどのように機能しますか?
どんな助けでも大歓迎です!
メルク。