Mongoose:保存时未执行验证
Posted
技术标签:
【中文标题】Mongoose:保存时未执行验证【英文标题】:Mongoose: Validation not being executed when saving 【发布时间】:2016-11-17 04:14:29 【问题描述】:我已经定义了这个 Mongoose 架构:
// validator function
var arrayWithAtLeastFiveElements = function (a)
return (a !== undefined && a.length >= 5);
;
var orderSchema = new Schema(
user:
type: Schema.ObjectId,
ref: User,
required: true
,
products: [
type: Schema.ObjectId,
ref: Product,
required: true,
validate: [arrayWithAtLeastFiveElements, 'Order needs to have at least five products']
]
,
timestamps:
createdAt: 'created_at',
updatedAt: 'updated_at'
);
当我尝试保存它时,如果products
是undefined
、null
或一个空数组,则不会执行验证,它会在每种情况下用一个空的产品数组保存新订单。验证仅在 products
是一个包含至少一个元素的数组时运行。有什么线索吗?有没有办法让验证在所有情况下都运行?另外,在这种情况下需要做什么?如果我根据需要定义 products 数组,我看不到验证有任何变化......
【问题讨论】:
根据我的经验,不要依赖猫鼬验证。 尝试将其定义为products: type: [Schema.ObjectId], required: true
。无论如何, undefined 仅使用所需的验证器进行验证。您还可以编写自己的验证器来验证数组长度并像minlength: 5
一样使用它。这个验证器仍然不会覆盖 undefined。
@Amiram Korach:谢谢!有用!但是,怎么会?现在我已经涵盖了所有内容,如果数组为空、null 或未定义需要验证它,在其他情况下我的自定义验证器运行。
我只是写了我一直这样做的方式。不知道你写的好不好。
好的。顺便说一句,我认为 minlength 验证仅适用于字符串
【参考方案1】:
定义它:
products:
type: [Schema.ObjectId],
required: true,
【讨论】:
以上是关于Mongoose:保存时未执行验证的主要内容,如果未能解决你的问题,请参考以下文章