2

这是我在这里的第一篇文章。

我正在学习 Node 和 Mongodb。我已经安装了node-mongodb-native驱动,发现了一些意想不到的东西。

我的脚本如下,基于官方教程

var test;  //short cut for later use

require('mongodb').MongoClient.connect("mongodb://localhost:27017/exampleDb", function(err, db) {
    if (err) {return console.log("some error",err);}

    console.log("database connected");

    test = db.collection('test');
    test.find().toArray(function(err, items) {
        if (err) {console.log("some error");} 
        else {console.log("still connected");}
    });

});

var rep = function () {
    setTimeout(function () {
        test.find().toArray(function(err, items) {
            if (err) {console.log("some error: " + err);} 
            else {console.log("still connected");}
        });           
        rep(); 
    }, 2000);
}   

rep();

所以每隔 2 秒,console.log 就会输出“仍然连接”,这是意料之中的。

如果 mongod.exe 窗口已关闭(以模拟与数据库的连接丢失),我希望在 console.log 中看到“一些错误”。但是,不会记录任何错误消息。

当 mongod.exe 重新启动时(模拟重新连接),console.log 输出许多“仍然连接”的流

我无法从手册或其他在线资源中找到答案。所以我有两个问题:

1)除了 on.('close') 之外,检测mongodb突然断开的当前最佳实践是什么,并且在发生这种断开连接时是否应该使用 find() 查询发出错误?

2) 重新连接后,console.log 会输出多行相同的消息,就好像它们在断开连接期间已排队并现在立即记录一样。这是正常的吗?我可以想到一个现实生活中的问题:管理员可能使用 insert() 来添加一些数据,而不是 find()。数据库连接中断但没有错误消息,因此管理员可能执行了许多 insert() 并且仍然看不到任何结果。然后在重新连接时,大量的 insert() 查询淹没了数据库?

请指出我的无知...

4

0 回答 0