その接続を操作してコレクションを照会する方法がわかりません。時々接続がすでにそこにあり、問題がないからです。ただし、接続を確立する必要がある場合、コレクションクエリはキューに入れられません。常に1つしか接続できないため、常に新しい接続を確立することはできません。接続コールバックでコレクションクエリが必要なようですが、接続がすでに存在する場合はスタンドアロンでも必要です。
もちろん、これは元に戻せませんが、すべての何とかとヤッダの頭上で、私はそれを正しくやっていないと思います。結局のところ、これは私にはちょっと構文的なサッカリンのようです。 シンタックスシュガーはどこにありますか?
これが基本的な例です。同じ秒でたくさんのリクエストを想像してみてください。
var util = require('util'),
mongo = require('mongodb'),
Server = mongo.Server,
Db = mongo.Db,
mServer = new Server('localhost', 27017),
mDb = new Db('SomeDatabase', mServer),
db;
if (mDb._state == 'disconnected') {
util.debug('MONGODB: connecting...');
mDb.open(function(err, newDb) {
if (!err) {
db = newDb;
// I cannot immediately work on a collection here,
// because it takes a moment for the db to connect.
}
});
}
else if (mDb._state == 'connecting') {
// I need to catch this state because I cannot work on collections yet,
// but I cannot connect either because it's already connecting.
}
// else if (mDb._state == 'connected') {
// Queries need to be performed after connection is established
// or when connection was already established by a previous request.
db.createCollection(collection, function(err, collection) {
if (!err) {
collection.insert(record, {safe:true}, function(err, result) {
util.debug('MONGODB: Inserted.');
});
}
});
// }
さて、私が見つけた初心者向けガイドはすべてのコールバックに関するmDb.open
ものですが、これはノードがすでに実行されているときに連続するリクエストで問題を引き起こします。別の接続を開くことを拒否します。では、単一の起動コールバックでは不十分な場合に、nodejsでmongodbをうまく操作するための実際の正しい方法は何ですか?
コールバック形式でクエリを渡すモジュールを想像します。このモジュールは、(1)接続コールバックを待機する場所、(2)コレクションに直接、または(3)待機するコールバックを渡します。接続しますが、接続コールバックには遅すぎます。しかし、私が言ったように、これは純粋な統語的サッカリンです。