我正在尝试验证猫鼬文档的更新。
我对字段进行如下验证检查:
reason: {
type: String,
enum: ['Finished', 'Incomplete'],
required: function() { return this.status == 'Inactive' }
}
status
字段是一个枚举,如下所示:
status: {
type: String,
enum: ['Active', 'Inactive'],
required: true
}
我在使用选项runValidators: true
的Express路由中有一个findByIdAndUpdate调用,但是如果我在未定义{status: 'Inactive' }
的情况下更新reason
之类的文档,它仍然会更新并且不会不会抛出ValidationError:
router.put('/:id', (req, res) => {
var id = req.params.id;
ItemInstance.findByIdAndUpdate(id, req.body, {runValidators: true}, (err, itemInstance) => {
if(err)
{
if(err.name == 'CastError')
return res.status(404).send({message: `Cannot find ItemInstance with id ${id}`, error: err})
else
return res.status(500).send(err)
}
return res.status(400).send({message: 'ItemInstance Found and Updated', itemInstance: itemInstance});
});
});
我找不到关于update()函数上的runValidators
选项是否可与自定义函数验证器(如上面的我的验证器)一起使用的太多信息,但我不知道为什么不应该这样做。
还有其他人遇到这个问题吗?
在此先感谢您的回复。