我似乎无法在其文档或Internet上找到任何MongoDB错误对象的示例。NodeJS本地驱动程序上的示例MongoDB错误是什么样的?
示例MongoDB错误对象的外观是什么样的?我想根据自己的目的“处理”错误和/或重新格式化它,具体取决于错误是什么。
我似乎无法在其文档或Internet上找到任何MongoDB错误对象的示例。NodeJS本地驱动程序上的示例MongoDB错误是什么样的?
示例MongoDB错误对象的外观是什么样的?我想根据自己的目的“处理”错误和/或重新格式化它,具体取决于错误是什么。
由于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
}
随着的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..."
}
所以,对于其他方面的任何保证,但code
是相当常见(并且非常有用)。这个数字是一个mongodb内部错误代码,驱动程序只是在可用时将其添加到MongoError对象。您可以在mongodb源代码文件中找到最新的错误代码列表:error_codes.err。
对驾驶员的NodeJS如何管理MongoDB的错误代码,一个有趣的例子,是the collection bulkWrite
source code,使用了toError
utils用code
抛出MongoError。
完美,谢谢! – qJake