Node.js 添加一个方法来表示模型

Node.js 添加一个方法来表示模型,node.js,validation,express,Node.js,Validation,Express,假设我有一个Express模型: var SchemaDescription = {}; var Model = = new mongoose.Schema(SchemaDescription); Express允许在SchemaDescription中调整数据验证。在保存时,它工作得非常完美,但在更新时,由于猫鼬的本性,它没有被调用,也没有干净的方法来调用它 我尝试了Model.pre('update',…)但在写入DB之前没有找到访问/更正模型数据的方法:因为复杂的验证逻辑,例如,在检查之

假设我有一个Express模型:

var SchemaDescription = {};
var Model = = new mongoose.Schema(SchemaDescription);
Express允许在SchemaDescription中调整数据验证。在保存时,它工作得非常完美,但在更新时,由于猫鼬的本性,它没有被调用,也没有干净的方法来调用它

我尝试了
Model.pre('update',…)
但在写入DB之前没有找到访问/更正模型数据的方法:因为复杂的验证逻辑,例如,在检查之前重新格式化一些数据

合乎逻辑的解决方案是将验证代码保存/更新控制器的处理程序,但这会导致代码重复。为了将MVC模式保留为save和update,我想将一个公共方法放在模型或模式中,以获取输入数据并对其进行验证

我的尝试看起来像:

Model.prototype.validate = function(input, isUpdate) {...};

以不同的组合

响应看起来总是像
“无法设置未定义的属性'validate'”

  • 是否有一种方法可以将自定义公共函数成员放入Express模型/模式中,以便在控制器中调用
  • 可以使用什么方法在保存和更新时验证数据,而无需代码复制,或/或将验证逻辑放入控制器

    • 你没有特快车,你有猫鼬车。根据最新文档,您可以在更新时显式激活验证:

      Mongoose方法:这是个好主意,谢谢。如果我有虚拟密码字段,就像这里推荐的那样,该怎么办?在更新(findOneAndUpdate)的情况下,我无法获取此密码。\u验证程序中的密码或this.password,以检查其是否为空或长度。看来这是一个软弱的一面,可以避免吗?
      SchemaDescription.validate = function(...) {...};