我有一个复杂的数据类型,我希望存储在一个猫鼬模型中。假设我的架构如下
dataSchema : {
name : 'string',
body : 'object'
}
在我的模型的save
或findOneAndUpdate
期间,我想使用抛出自定义错误消息的解析器对正文执行一些验证。
我目前对验证的处理如下:
dataSchema.path('body').validate(function(body,callback){
// Attempt to parse the structure
try{
parse(body)
callback(true)
} catch(me) {
// callback(me) // does not help!
callback(false)
}
}, 'Unable to parse body')
与
一起dataSchema.pre('findOneAndUpdate', function(next) {
this.options.runValidators = true;
next();
});
这似乎按预期工作。但是,我想自定义验证程序的错误消息(当前:'无法解析主体'),以便我可以在catch语句中传播错误信息me
。
这可能吗?
答案 0 :(得分:0)
在validation的mongoose文档中,在页面底部方便地说明
现在我们已经涵盖了验证,让我们来看看你的情况 使用Mongoose的中间件处理高级验证。
可以找到here。
使用中间件我的问题是使用帮助函数解决的
function validate(rec, next){
try{
// Attempt to parse the object
parse(rec.object)
next()
} catch(me){
// report fail - Note should use mongoose ValidationError class
next(me)
}
}
使用以下挂钩连接:
dataSchema.pre('save',function(next){ validate(this, next) }
dataSchema.pre('findOneAndUpdate', function(next){ validate(this, next) }