我不清楚如何处理该连接并查询该集合。 因为有时连接已经存在并且没有问题。但是当需要建立连接时,集合查询不会排队。 您也无法始终建立新连接,因为您可以(并且应该)只创建一个连接。 看起来您需要在连接回调中使用集合查询,但在连接已经存在时也是独立的。
当然,这不是可以撤销的,但是由于所有的blah和yaddah开销,我想我做得不对。 毕竟,这对我来说似乎有点 syntactic saccharin 。 syntactic sugar在哪里?
这是一个基本的例子。想象一下同一秒钟中的一堆请求:
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)等待连接,但连接回调为时已晚。但就像我说的,这是纯粹的语法糖精。
答案 0 :(得分:1)
你误会了什么。首先,您创建与DB的连接:
var mDb = new Db('SomeDatabase', mServer);
并保留对此连接的引用。每当您想要从/向DB加载/保存内容时,都使用相同的变量。您不会在每个请求上重新创建它。甚至在创建Web服务器本身之前就应该进行初始化(在open
回调上创建服务器)。这是一个伪代码:
var webserver = INITIALIZE_NEW_SERVER( );
var mDB = new Db('SomeDatabase', mServer);
// set request handler
WHEN_REQUEST ---> {
mDB.createCollection( ... );
// whatever
}
mDb.open(function(error, newDb) {
// handle errors
webserver.listen( );
});