Mongoose 的自定义错误消息

新手上路,请多包涵

因此,根据 mongoose docs ,您应该能够在架构中设置自定义错误消息,如下所示:

  var breakfastSchema = new Schema({
  eggs: {
    type: Number,
    min: [6, 'Too few eggs'],
    max: 12
  },
  bacon: {
    type: Number,
    required: [true, 'Why no bacon?']
  }
});

所以我想做类似的事情:

 var emailVerificationTokenSchema = mongoose.Schema({
   email: {type: String, required: true, unique: [true, "email must be unique"]},
   token: {type: String, required: true},
   createdAt: {type: Date, required: true, default: Date.now, expires: '4h'}
});

这个想法是,当您尝试保存其中一个令牌时,并且已经存在一个冲突的令牌时,它会弹出一条错误消息,上面写着“电子邮件必须是唯一的”。

但是,当我做这样的事情时(我用相同的电子邮件保存一个令牌):

 verificationToken.save( function (err) {
    if (err) {
      return console.log(err);
    }
    else {
      return console.log(err);
    }
});

我不断得到这个:

 'E11000 duplicate key error: index ___.emailVerificationToken.$email_1 dup key: { : "_____@wdad.com

有什么想法吗?自定义消息不支持唯一参数吗?这是一种可行的做事方式吗?

原文由 Vangogh500 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 623
2 个回答

自定义消息不支持唯一参数吗?

Mongoose 中的唯一性不是验证参数(如 required );它告诉 Mongoose 在 MongoDB 中为该字段创建一个唯一索引。

唯一性约束完全在 MongoDB 服务器中处理。当您添加具有重复键的文档时,MongoDB 服务器将返回您正在显示的错误( E11000... )。

如果要创建自定义错误消息,您必须自己处理这些错误。 Mongoose 文档“错误处理中间件” )为您提供了如何创建自定义错误处理的示例:

 emailVerificationTokenSchema.post('save', function(error, doc, next) {
  if (error.name === 'MongoError' && error.code === 11000) {
    next(new Error('email must be unique'));
  } else {
    next(error);
  }
});

(尽管这不会为您提供唯一性约束失败的特定字段)

原文由 robertklep 发布,翻译遵循 CC BY-SA 4.0 许可协议

当您尝试它时,这不是直接可能的,但您可能想看看 mongoose-unique-validator ,它允许在违反唯一性时自定义错误消息。

您尤其应该对有关 自定义错误 的部分感兴趣。

得到你想要的

“电子邮件必须是唯一的”

它看起来类似于这个

var uniqueValidator = require('mongoose-unique-validator');
...
emailVerificationTokenSchema.plugin(uniqueValidator, { message: '{PATH} must be unique' });

原文由 DAXaholic 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题