【问题标题】:Add a method to Express model向 Express 模型添加方法
【发布时间】:2016-08-31 03:25:46
【问题描述】:

假设我有一个 Express 模型:

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

Express 允许在 SchemaDescription 中调整数据验证。保存时它工作得很好,但在更新时,由于猫鼬的性质,它没有被调用,也没有干净的方法来调用它。

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

一个合乎逻辑的解决方案是将验证代码放入保存/更新控制器的处理程序,但这会导致代码重复。为了将 MVC 模式保持为保存和更新,我想为模型或模式添加一个公共方法,它获取输入数据并验证它们。

我的尝试如下:

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

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

不同的组合。

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

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

【问题讨论】:

标签: node.js validation express


【解决方案1】:

您没有 Express 模型,您有 Mongoose 模型。根据最新文档,您可以在更新时显式激活验证:http://mongoosejs.com/docs/validation.html#update-validators

【讨论】:

  • 这是个好主意,谢谢。如果我有虚拟密码字段怎么办,正如这里推荐的 stackoverflow.com/a/14015331/3706373 ?在更新(findOneAndUpdate)的情况下,我无法在验证器中获取 this._password 或 this.password 来检查它是否为空或长度。似乎这是该方法的弱点,可以避免吗?
猜你喜欢
  • 2017-12-27
  • 1970-01-01
  • 2011-05-17
  • 2015-05-24
  • 2020-01-27
  • 1970-01-01
  • 2010-12-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多