Mongoose,MongoError处理

时间:2014-09-08 01:41:44

标签: node.js mongodb error-handling mongoose

我正在创建一个使用mongoose与MongoDb交互的简单应用程序,并且独特的验证错误处理一直困扰着我。

UserSchema = new Schema({
                        email: {type:String, required: true, unique: true, trim: true, match: [emailRegex, 'Email format is invalid']},
                        hashedPassword: {type: String, default: ''},
                        salt: {type: String, required: true, unique:true}

                    }
);

在上面的架构中,我有唯一的:对于电子邮件是真的,当输入具有重复电子邮件地址的新文档时,我收到的错误是:

{ [MongoError: insertDocument :: caused by :: 11000 E11000 duplic
ndex: testdb.users.$email_1  dup key: { : "minhs22sa22f@gmail.com
  name: 'MongoError',
  code: 11000,
  err: 'insertDocument :: caused by :: 11000 E11000 duplicate key
estdb.users.$email_1  dup key: { : "minhs22sa22f@gmail.com" }' }

上面的错误对象需要花费很多精力从它们中提取信息才能显示回客户端,所以我的问题是:无论如何让它使用 validationError 代替,这些更直观,简单?

我也考虑过使用自定义路径验证,但如果可能的话,最好使用内置功能。<​​/ p>

非常感谢,

2 个答案:

答案 0 :(得分:1)

不是真的。该错误是电子邮件字段中的唯一密钥违规,由MongoDB发出。为了使这成为验证错误,验证函数必须自己发现唯一的密钥违规。在验证函数中基本上有两种方法可以实现:

  1. 查询MongoDB,得到上述错误,并将其解析为validationError
  2. 记住所有email,以便您自己检查唯一的密钥违规行为
  3. 第一种方法只是将解析推送到验证函数中,并使用额外的MongoDB查询来获取无效。第二个没有意义。

    编写一个函数,将错误解析为您需要的任何有用形式。它只需要编写和测试一次。

答案 1 :(得分:0)

我发现的另一种可能性是使用一个将重复键错误转换为类似验证的mom模块。

这个名为mongoose-unique-validator

我没有读过代码,但我的猜测只是解析错误才能重新格式化。

另外,我会看一下表演,很有可能会影响它。