我正在尝试决定如何处理 Mongoose 中的验证错误。
使用节点验证器的自定义错误消息
我已经使用node-validator定义了自己的验证规则,例如:
UserSchema.path('username')
.validate(function (username) {
return validator.check(username).notEmpty()
}, 'Username cannot be blank')
这将生成如下所示的错误:
username:
{ message: 'Validator "Username cannot be blank" failed for path username',
name: 'ValidatorError',
path: 'username',
type: 'Username cannot be blank' },
使用猫鼬验证器
但是,node-validator 提供了自己的错误消息。如果我使用mongoose-validator Node 模块将 node-validator 直接插入到我的架构中,那么我可以直接使用这些错误消息:
var UserSchema = new Schema({
name: { type: String, validate: [validate('notEmpty')] }
});
这将生成如下所示的错误消息:
name:
{ message: 'Validator "String is empty" failed for path name',
name: 'ValidatorError',
path: 'name',
type: 'String is empty' } }
我也可以在这里提供自定义错误消息:
var UserSchema = new Schema({
name: { type: String, validate: [validate({message: 'Name cannot be blank' }, 'notEmpty')] }
});
猫鼬required
旗
Mongoose 允许您根据需要定义一个字段:
var UserSchema = new Schema({
name: { type: String, required: true }
});
这将生成如下所示的错误消息:
name:
{ message: 'Validator "required" failed for path name',
name: 'ValidatorError',
path: 'name',
type: 'required' } }
问题
感觉好像这些验证器希望您使用它们的内置错误消息。例如,我想声明一个required
如上所示的字段,但我找不到自定义错误消息的方法。而且 mongoose-validator 模块直到最近才支持自定义消息,这让我认为它们是模型级别的反模式。
实现这些验证器的最佳方式是什么?我应该让他们产生自己的错误,然后以某种方式解释它们吗?