因此,根据 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 许可协议
Mongoose 中的唯一性不是验证参数(如
required
);它告诉 Mongoose 在 MongoDB 中为该字段创建一个唯一索引。唯一性约束完全在 MongoDB 服务器中处理。当您添加具有重复键的文档时,MongoDB 服务器将返回您正在显示的错误(
E11000...
)。如果要创建自定义错误消息,您必须自己处理这些错误。 Mongoose 文档( “错误处理中间件” )为您提供了如何创建自定义错误处理的示例:
(尽管这不会为您提供唯一性约束失败的特定字段)