向Express模型添加一个方法

假设我有一个Express模型:

var SchemaDescription = {}; var Model = = new mongoose.Schema(SchemaDescription); 

Express允许在SchemaDescription中调整数据validation。 在保存它完美的作品,但在更新,由于mongoose性质,它不被称为,并没有干净的方式来称呼它。

我试过Model.pre('update', ...); 但没有find在写入数据库之前访问/更正模型数据的方法:因为复杂的validation逻辑,例如在检查之前重新格式化一些数据。

一个合乎逻辑的解决scheme是将validation代码保存/更新控制器的处理程序,但会导致代码的重复。 为了保存MVC模式,至于更新,我想把一个公共方法,模式,或架构,获取input数据和validation它们。

我的尝试看起来像:

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

要么

 SchemaDescription.validate = function(...) {...}; 

以不同的组合。

响应总是看起来像"Cannot set property 'validate' of undefined"

  • 有没有一种方法可以将一个自定义的公共函数成员放到Express模型/模式中,以便在控制器中调用?
  • 可以使用什么方法validation保存和更新的数据,而不会出现代码重复,或者将validation逻辑放在控制器上?

你没有Express模型,你有一个Mongoose模型。 根据最新的文档,您可以明确激活更新validation: http : //mongoosejs.com/docs/validation.html#update-validators