我正在从MongoDB Node documentation逐字地复制一个示例(几乎从字面上看,MongoDB的官方文档尚未更新以匹配the recommendation to use MongoClient,所以我使用的是MongoClient。)
createcollection()的回调永远不会运行。我遇到过与其他连接方法类似的问题,例如find(),findAndModify()。
直接复制单元测试:
mongodb.MongoClient.connect(URL, function(err, db){
// Establish connection to db
log(1)
assert.equal(null, err);
// Grab a collection without a callback no safe mode
var col1 = db.collection('test_correctly_access_collections');
// Grab a collection with a callback but no safe operation
db.collection('test_correctly_access_collections', function(err, col2) {
log(2)
assert.equal(null, err);
// Grab a collection with a callback in safe mode, ensuring it exists (should fail as it's not created)
db.collection('test_correctly_access_collections', {strict:true}, function(err, col3) {
log(3)
assert.ok(err != null);
// Create the collection
db.createCollection('test_correctly_access_collections', function(err, result) {
log(4)
// NEVER RUNS
});
});
});
})
从其他阅读中,我听说如果连接断开或缓慢,MongoDB将对查询进行排队。但connect()工作正常,我的数据库是localhost,并且有<2Kb的文档。
我的问题是:
编辑:代码每个网址只能运行一次。后续尝试使用相同的URL运行相同的代码将始终失败。更改URL将再次使用,每个URL一次。
答案 0 :(得分:2)
这是因为node-mongodb-native,当前“稳定”的MongoDB驱动程序,默默地包装并抛弃所有异常,包括从回调中启动的任何内容,无论有多少范围内。
请参阅https://groups.google.com/forum/#!topic/node-mongodb-native/AZewJaX4YuE
解决方案是使用不稳定的1.3.18系列mongodb软件包,直到1.4(永久修复问题)稳定。