Node.js NodeJS本机驱动程序上的MongoDB错误示例是什么样子的?

Node.js NodeJS本机驱动程序上的MongoDB错误示例是什么样子的?,node.js,mongodb,node-mongodb-native,Node.js,Mongodb,Node Mongodb Native,我似乎在他们的文档或互联网上找不到任何MongoDB错误对象的例子 示例MongoDB错误对象是什么样子的?我想“处理”错误和/或为我自己的目的重新格式化它,这取决于错误是什么。从MongoDB 2.4.8开始,使用MongoDB1.3.23驱动程序,它们如下所示: { "name":"MongoError", "err":"E11000 duplicate key error index: test.test.$country_1 dup key: { : \"XYZ\" }",

我似乎在他们的文档或互联网上找不到任何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
}
{
   "name": : "MongoError",
   "message": "E11000 duplicate key error collection: main_db.stores index..."
}
MongoError对象 对于(>=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",
  "err":"E11000 duplicate key error index: test.test.$country_1  dup key: { : \"XYZ\" }",
  "code":11000,
  "n":0,
  "connectionId":10706,
  "ok":1
}
{
   "name": : "MongoError",
   "message": "E11000 duplicate key error collection: main_db.stores index..."
}
错误代码字段 因此,对于其他字段没有保证,但是
code
非常常见(并且非常有用)。此数字是mongodb内部错误代码,驱动程序只需将其添加到MongoError对象(如果可用)。您可以在mongodb源代码文件中找到最新的错误代码列表:

关于nodejs驱动程序如何管理mongodb错误代码的一个有趣的例子是,使用with a
code
抛出MongoError

节点mongodb驱动程序3.x
但错误模型基本相同。

谢谢您的回答。他们做了一个非常可耻的设计来管理错误。在适当的API中,必须访问错误代码。