gpt4 book ai didi

node.js - Mongoose 的自定义错误消息

转载 作者:IT老高 更新时间:2023-10-28 13:09:53 25 4
gpt4 key购买 nike

所以根据 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

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

最佳答案

Is unique parameter not supported for custom messages?

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com