NodeJS 本机驱动程序上的示例 MongoDB 错误是啥样的?
Posted
技术标签:
【中文标题】NodeJS 本机驱动程序上的示例 MongoDB 错误是啥样的?【英文标题】:What does an example MongoDB error look like on the NodeJS native driver?NodeJS 本机驱动程序上的示例 MongoDB 错误是什么样的? 【发布时间】:2014-01-03 01:37:30 【问题描述】:我似乎在他们的文档或互联网上找不到任何 MongoDB 错误对象的示例。
示例 MongoDB 错误对象是什么样的?我想为自己的目的“处理”错误和/或重新格式化它,这取决于错误是什么。
【问题讨论】:
【参考方案1】:从带有 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
【讨论】:
【参考方案2】:MongoError 对象
使用较新版本的 node-mongodb-driver (>= 2) 情况略有不同。
在nodejs driver source code 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..."
err.code 字段
因此,不能保证其他字段,但code
很常见(并且非常有用)。此数字是 mongodb 内部错误代码,驱动程序只需将其添加到 MongoError 对象(如果可用)。您可以在 mongodb 源代码文件中找到最新的错误代码列表:error_codes.yml。
关于 nodejs 驱动程序如何管理 mongodb 错误代码的一个有趣示例是 the collection bulkWrite
source code,它使用 toError
utils 和 code
来引发 MongoError。
node-mongodb-driver 3.x
MongoError source code has been refactored 但错误模型基本相同。
【讨论】:
感谢您的回答。他们做了一个非常可耻的设计来管理错误。在适当的 API 中应该强制访问错误代码。以上是关于NodeJS 本机驱动程序上的示例 MongoDB 错误是啥样的?的主要内容,如果未能解决你的问题,请参考以下文章
如何检查MongoDB本机nodejs驱动程序中是不是存在集合?
如何在nodejs mongodb本机驱动程序中将字符串转换为ObjectId?
为桌面、移动本机应用程序和 oAuth 功能设计 nodejs expressjs mongodb Webserver 流