我正在尝试为我的应用程序创建一个警报系统,当其中一个服务(例如MongoDB)无法运行时,它会触发。
我正在做的是,一旦应用程序启动,我关闭我的MongoDB服务器并尝试连接到它,但是我的应用程序只是陷入执行方法而不是接收错误。服务器控制台看起来好像正在执行。
我目前的代码(coffeescript)是:
checkMongoService: ()->
mongo = Npm.require 'mongodb'
assert = Npm.require 'assert'
url = 'mongodb://....'
mongo.connect url, (err, db) ->
assert.equal null, err
console.log 'Connected correctly to server'
db.close()
return
我也一直试着做一个简单的
Meteor.users.find().count();
或使用MongoInternals
testConnection = new MongoInternals.RemoteCollectionDriver("mongodb://...);
但仍然是同样的问题,当mongo没有运行时,不会抛出任何错误并且控制台停止工作。如果那时我再次启动Mongo,它将返回结果(在这种情况下,日志'正确连接到服务器')
我注意到的是,如果我尝试meteor shell
执行testConnection = new MongoInternals.RemoteCollectionDriver("mongodb://...);
,我会收到错误"Error: failed to connect to [127.0.0.1:27017]"
TL; DR
您是否可以了解我如何检查mongo是否可以访问,或者您是否知道我上面的代码是否有问题?
答案 0 :(得分:1)
尝试将超时设置为比默认的30秒短一些:
mongo.connect(url, {
connectTimeoutMS: 1000,
socketTimeoutMS: 1000,
reconnectTries: 1
}, function(err, db) {...}
(全套连接参数为here)
答案 1 :(得分:-1)
Meteor.status().status
来自文档
此方法返回客户端与服务器之间的连接状态。返回值是具有以下字段的对象:
connected(布尔) 如果当前连接到服务器,则为True。如果为false,则更改和方法调用将排队,直到重新建立连接。
status(String) 大段引用 描述当前的重新连接状态。可能的值已连接(连接已启动并正在运行),连接(断开连接并尝试打开新连接),失败(永久无法连接;例如,客户端和服务器支持不同版本的DDP),等待(未通过)连接并等待尝试重新连接)和离线(用户已断开连接)。