2013-12-15 51 views

回答

6

由于MongoDB的2.4.8与mongodb 1.3.23驱动程序的时候,看起来就像这样:

{ 
    "name":"MongoError", 
    "err":"E11000 duplicate key error index: test.test.$country_1 dup key: { : \"XYZ\" }", 
    "code":11000, 
    "n":0, 
    "connectionId":10706, 
    "ok":1 
} 
+0

完美,谢谢! – qJake

2

MongoError对象

随着的node-mongodb-driver(如2.2)的版本新的版本有一点有点不同。

nodejs driver source code内部,您可以看到错误对象属性可以是各种各样的(请参见第34行)。只有名称和消息字段总是可用的。

我粘贴这里有趣的一段代码,从mongodb-core/lib/error.js,看最后的for循环。

function MongoError(message) { 
    this.name = 'MongoError'; 
    this.message = message; 
    Error.captureStackTrace(this, MongoError); 
} 

MongoError.create = function(options) { 
    var err = null; 
    if(options instanceof Error) { 
    err = new MongoError(options.message); 
    err.stack = options.stack; 
    } else if(typeof options == 'string') { 
    err = new MongoError(options); 
    } else { 
    err = new MongoError(options.message || options.errmsg || options.$err || "n/a"); 
    // Other options 
    for(var name in options) { 
     err[name] = options[name]; 
    } 
    } 
    return err; 
} 

所以,一个错误的对象将看起来,至少,这样的:

{ 
    "name": : "MongoError", 
    "message": "E11000 duplicate key error collection: main_db.stores index..." 
} 

err.code场

所以,对于其他方面的任何保证,但code是相当常见(并且非常有用)。这个数字是一个mongodb内部错误代码,驱动程序只是在可用时将其添加到MongoError对象。您可以在mongodb源代码文件中找到最新的错误代码列表:error_codes.err

对驾驶员的NodeJS如何管理MongoDB的错误代码,一个有趣的例子,是the collection bulkWrite source code,使用了toError utilscode抛出MongoError。

相关问题