这是我在这里的第一篇文章。
我正在学习 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() 查询淹没了数据库?
请指出我的无知...