Van*_*500 15 error-handling mongoose mongodb node.js
因此根据mongoose 文档,您应该能够在架构中设置自定义错误消息,如下所示:
var breakfastSchema = new Schema({
eggs: {
type: Number,
min: [6, 'Too few eggs'],
max: 12
},
bacon: {
type: Number,
required: [true, 'Why no bacon?']
}
});
Run Code Online (Sandbox Code Playgroud)
所以我想做类似的事情:
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'}
});
Run Code Online (Sandbox Code Playgroud)
我们的想法是,当您尝试保存其中一个令牌,并且已经存在冲突时,它会输出一条错误消息,指出"电子邮件必须是唯一的".
但是当我做这样的事情时(我使用相同的电子邮件保存令牌):
verificationToken.save( function (err) {
if (err) {
return console.log(err);
}
else {
return console.log(err);
}
});
Run Code Online (Sandbox Code Playgroud)
我一直这样:
'E11000 duplicate key error: index ___.emailVerificationToken.$email_1 dup key: { : "_____@wdad.com
Run Code Online (Sandbox Code Playgroud)
有什么想法吗?自定义消息不支持唯一参数吗?这是一种可行的方式吗?
rob*_*lep 20
自定义消息不支持唯一参数吗?
Mongoose中的唯一性不是验证参数(如required); 它告诉Mongoose在MongoDB中为该字段创建一个唯一索引.
唯一性约束完全在MongoDB服务器中处理.当您添加具有重复键的文档时,MongoDB服务器将返回您正在显示的错误(E11000...).
如果要创建自定义错误消息,则必须自己处理这些错误.将猫鼬文档(搜索"错误处理中间件")提供了有关如何创建自定义错误处理的例子:
emailVerificationTokenSchema.post('save', function(error, doc, next) {
if (error.name === 'MongoError' && error.code === 11000) {
next(new Error('email must be unique'));
} else {
next(error);
}
});
Run Code Online (Sandbox Code Playgroud)
(虽然这不会为您提供唯一性约束失败的特定字段)
尝试时并不能直接实现,但是您可能想看看mongoose-unique-validator,如果违反了唯一性,它将允许自定义错误消息。
特别是您应该对有关自定义错误的部分感兴趣。
为了得到你想要的
“电子邮件必须唯一”
它看起来像这样
var uniqueValidator = require('mongoose-unique-validator');
...
emailVerificationTokenSchema.plugin(uniqueValidator, { message: '{PATH} must be unique' });
Run Code Online (Sandbox Code Playgroud)
verificationToken.save( function (err) {
if (err) {
return res.status(400).send({
message: (err.name === 'MongoError' && err.code === 11000) ? 'Email already exists !' : errorHandler.getErrorMessage(err)
});
}
else {
return console.log('No Error');
}
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15385 次 |
| 最近记录: |