我似乎无法在他们的文档或互联网上找到MongoDB错误对象的任何示例.
示例MongoDB错误对象是什么样的?我想根据错误来"处理"错误和/或为自己的目的重新格式化错误.
从使用mongodb
1.3.23驱动程序的MongoDB 2.4.8 开始,它们看起来像这样:
{ "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),事情有点不同.
在nodejs驱动程序源代码2.2中,您可以看到错误对象属性可以是各种各样的(参见第34行).只有名称和消息字段始终可用.
这是一段有趣的代码mongodb-core/lib/error.js (v2.2)
,看看最后一个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错误代码的一个有趣示例是集合bulkWrite
源代码,它使用带有a 的toError
utilscode
来抛出MongoError.
该MongoError源代码已经重构但误差模型本质上是一样的.