【发布时间】:2014-11-29 17:45:38
【问题描述】:
我正在开发一个应用程序。 MongoDB 服务器托管在远程主机上。所以,我非常热衷于使用socketTimeoutMS: 30000 来确保引发错误——并且我可以在我的应用程序中记录问题。
我尝试使用 URL,将 MONGO_URL 设置为 mongodb://localhost/ddd18?socketTimeoutMS=4000'。
或者使用选项:
require('mongodb').MongoClient.connect( process.env.MONGO_URL, { server: { socketOptions: { socketTimeoutMS: 6500, connectTimeoutMS: 6500 } } } , function( err, db ){
或者:
require('mongodb').MongoClient.connect( process.env.MONGO_URL, { mongos: { socketOptions: { socketTimeoutMS: 6500, connectTimeoutMS: 6500 } } } , function( err, db ){
或选项中的其他组合(如直接{ socketOptions: { socketTimeoutMS: 6500, connectTimeoutMS: 6500 } } 甚至{ socketTimeoutMS: 6500, connectTimeoutMS: 6500 })。
如果我执行以下操作:
- 运行我的应用程序(可以很好地连接到 MongoDB)
- 彻底杀死 MongoDB
- 尝试执行操作
尝试将永远挂起。其实它会挂在那里,然后当我最终重新启动MongoDB时,操作就会真正开始并完成。
我遇到的问题是我的客户有 30 秒的超时。如果服务器不这样做,并且由于某种原因它静默了几分钟,那么客户端报告为“失败”的所有这些操作实际上都会发生——这很愚蠢。
我做错了什么吗?
相关文档:http://mongodb.github.io/node-mongodb-native/driver-articles/mongoclient.html
【问题讨论】:
标签: node.js mongodb node-mongodb-native