Node.js 添加一个方法来表示模型
假设我有一个Express模型: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之前没有找到访问/更正模型数据的方法:因为复杂的验证逻辑,例如,在检查之
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(...) {...};