我目前正在测试一些代码如何应对以下场景:
- Node.js 应用程序启动并成功建立与 mongodb 的连接
- 成功建立连接后,mongodb服务器死掉,所有后续请求都失败
为此,我得到了使用官方驱动程序的以下代码(在此处找到:https ://github.com/mongodb/node-mongodb-native ):
MongoClient.connect('mongodb://localhost:27017/testdb', function(err, db) {
app.get('/test', function(req, res) {
db.collection('users', function (err, collection) {
console.log(err);
if (err) {
// ## POINT 1 ##
// Handle the error
}
else {
collection.find({ 'username': username }, { timeout: true }).toArray(function(err, items) {
console.log(err);
if (err) {
// ## POINT 2 ##
// Handle the error
}
else {
if (items.length > 0) {
// Do some stuff with the document that was found
}
else {
// Handle not finding the document
}
}
});
}
});
});
});
由于在处理请求时 mongodb 服务器不再运行,我假设在我标记为 ## POINT 1 ## 或 ## POINT 2 ## 的点上,它会返回一个错误指示超时;然而,事实并非如此。
我尝试了许多不同的设置(包括您可以在此处看到的明确允许光标超时的设置),但是我似乎无法以任何方式启用它。在我尝试过的每个配置中,Node.js 只会继续等待 find() 操作回调,但它永远不会。
如果我在运行 mongodb之前启动 Node.js 应用程序,它会很好地捕获连接回调中的错误,但如果在此之后连接断开,它似乎不会以任何方式处理它。
是否有我遗漏的设置,或者在建立连接后无法检测到连接被终止?
编辑:为了清楚起见,find 方法中使用的用户名变量实际上是在我的完整代码中声明的,我在这篇文章中放置的代码是一个简化版本,用于说明结构和错误检查。