检查Meteor上的mongo状态?

时间:2016-07-27 13:21:48

标签: mongodb meteor

我正在尝试为我的应用程序创建一个警报系统,当其中一个服务(例如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是否可以访问,或者您是否知道我上面的代码是否有问题?

2 个答案:

答案 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),等待(未通过)连接并等待尝试重新连接)和离线(用户已断开连接)。

https://docs.meteor.com/api/connections.html