数据库连接error handling和尚

我正在使用一个看起来像一个代码的和尚

var monk = require('monk') var db = monk('localhost/mydb') if(!db){ console.log('no connection') } 

当我运行它,控制台日志“无连接”,但我想知道为什么它不连接,(也许看到一个堆栈跟踪“我该怎么做?

看起来这是已知的错误。 https://github.com/Automattic/monk/issues/24

在你的代码片段中,monk(url)返回db对象是否连接。

这是连接的db对象

 > dbgood { driver: { _construct_args: [], _native: { domain: null, _events: {}, _maxListeners: 10, databaseName: 'dbgood', serverConfig: [Object], options: [Object], _applicationClosed: false, slaveOk: false, bufferMaxEntries: -1, native_parser: true, bsonLib: [Object], bson: [Object], bson_deserializer: [Object], bson_serializer: [Object], _state: 'connected', pkFactory: [Object], forceServerObjectId: false, safe: false, notReplied: {}, isInitializing: true, openCalled: true, commands: [], logger: [Object], tag: 1418920835318, eventHandlers: [Object], serializeFunctions: false, raw: false, recordQueryStats: false, retryMiliSeconds: 1000, numberOfRetries: 60, readPreference: [Object] }, _emitter: { domain: null, _events: {}, _maxListeners: 50 }, _state: 2, _connect_args: [ 'mongodb://localhost/dbgood', [Object] ] }, helper: { toObjectID: [Function], id: { [Function: ObjectID] index: 10690856, createPk: [Function: createPk], createFromTime: [Function: createFromTime], createFromHexString: [Function: createFromHexString], isValid: [Function: isValid] } }, collections: {}, options: { safe: true }, _events: {} } 

当mongodb没有运行时,这是db对象

 > dbbad { driver: { _construct_args: [], _native: null, _emitter: { domain: null, _events: {}, _maxListeners: 50 }, _state: 0, _connect_args: [ 'mongodb://dbbad', [Object] ] }, helper: { toObjectID: [Function], id: { [Function: ObjectID] index: 10690856, createPk: [Function: createPk], createFromTime: [Function: createFromTime], createFromHexString: [Function: createFromHexString], isValid: [Function: isValid] } }, collections: {}, options: { safe: true }, _events: {} } 

也许现在,你可以使用_native._state来检查连接。

每个https://github.com/Automattic/monk/pull/142 monk('localhost')现在可以作为一个承诺,当连接打开时parsing,并在抛出错误时拒绝。

 let db = monk('localhost'); db.catch(function(err) { console.log(err) }); 

嘿,我一直在努力,最终得到了一个非常漂亮的解决scheme。 所以这是一个基本的节点哲学,其中callback有第一个参数作为错误对象。 这里和尚这个好,解决这个问题的代码是:

 var monk = require('monk'); var db = monk('localhost/mydb', function(err, db){ if(err){ console.error("Db is not connected", err.message); } }); 

正如你所看到的,一个callback函数被传递给monk对象本身,并且这个callback函数有我们感兴趣的参数,第一个是err对象,第二个是db对象。

err对象包含有关在build立连接和相应的消息时发生的错误的所有信息。

你可以继续看看errdb对象,他们实际上更深入地了解了monk如何处理事情以及mongo DB返回了什么对象。

希望这可以解决你的问题。

我find的最好的解决scheme是添加一个“healthcheck”集合到你的数据库,添加一个文档,并尝试一个查找命令。 如果您从find命令中得到错误,则logging错误。

其他解决scheme的问题,如检查数据库对象,是你的状态很可能保持“连接”,直到所有的app.js脚本完成运行。 Monk会将您的连接前数据库调用排队,因此对数据库执行健康检查调用可确保脚本在发出错误或成功消息之前等待连接序列完成。