runValidators选项不适用于使用猫鼬的findByIDAndUpdate或findOneAndUpdate

时间:2018-12-11 12:34:52

标签: node.js validation express mongoose mongoose-schema

我正在尝试验证猫鼬文档的更新。

我对字段进行如下验证检查:

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选项是否可与自定义函数验证器(如上面的我的验证器)一起使用的太多信息,但我不知道为什么不应该这样做。

还有其他人遇到这个问题吗?

在此先感谢您的回复。

0 个答案:

没有答案