2016-07-27 49 views
0

我正在嘗試爲我的應用程序創建一個警報系統,當其中一個服務(例如MongoDB)不起作用時會觸發該警報系統。檢查流星的mongo狀態?

我在做的是,一旦應用程序啓動,我關閉了我的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 

我也一直在與

testConnection = new MongoInternals.RemoteCollectionDriver("mongodb://...);

試圖做一個簡單的

Meteor.users.find().count();

或使用MongoInternals

但仍然同樣的問題,當mongo沒有運行時,沒有引發錯誤,控制檯停止工作。如果當時我再開始蒙戈,它只是返回的結果(在這種情況下,「正確連接到服務器的日誌)

的東西,我已經注意到的是,如果我有meteor shell嘗試執行testConnection = new MongoInternals.RemoteCollectionDriver("mongodb://...);我得到一個錯誤"Error: failed to connect to [127.0.0.1:27017]"

TL; DR

你可能對我怎麼能檢查是否蒙戈可達一個想法或者你知道,如果我做錯了什麼上面的代碼?

回答

1

嘗試設置超時爲比默認30秒的比特:

mongo.connect(url, { 
    connectTimeoutMS: 1000, 
    socketTimeoutMS: 1000, 
    reconnectTries: 1 
}, function(err, db) {...} 

(全套連接則params的是here

+0

遺憾的是它並沒有幫助,它仍然停留:( – xunga

+0

嗯......精緻的建議是降低reconnectTries作爲答案編輯。 –

-1
Meteor.status().status 
從文檔

該方法返回客戶端和服務器之間連接的狀態。返回值是包含以下字段的對象:

connected(布爾型) 如果當前連接到服務器,則返回true。如果爲false,則更改和方法調用將排隊等待連接重新建立。

status(String) Blockquote 描述當前的重新連接狀態。可能的值已連接(連接已啓動並正在運行),連接(斷開連接並嘗試打開新連接),失敗(永久失敗連接;例如,客戶端和服務器支持不同版本的DDP),正在等待連接並等待嘗試重新連接)和離線(用戶已斷開連接)。

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