因此,根据 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'}
});
这样的想法是,当您尝试保存其中一个 token 时,已经存在一个冲突的 token ,它将发出一条错误消息,指出“电子邮件必须是唯一的”。
但是,当我做这样的事情时(我用相同的电子邮件保存 token ):
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
有什么想法吗?自定义消息不支持唯一参数吗?这是解决问题的可行方法吗?
最佳答案
Mongoose 中的唯一性不是验证参数(例如required
);它告诉Mongoose在MongoDB中为该字段创建唯一索引。
唯一性约束完全在MongoDB服务器中处理。当您添加带有重复键的文档时,MongoDB服务器将返回您所显示的错误(E11000...
)。
如果要创建自定义错误消息,则必须自己处理这些错误。 Mongoose documentation(“错误处理中间件”)为您提供了有关如何创建自定义错误处理的示例:
emailVerificationTokenSchema.post('save', function(error, doc, next) {
if (error.name === 'MongoError' && error.code === 11000) {
next(new Error('email must be unique'));
} else {
next(error);
}
});
(尽管这不会为您提供唯一性约束失败的特定字段)
关于node.js - Mongoose 的自定义错误消息,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38945608/