【发布时间】: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 验证仅适用于字符串
标签: arrays node.js mongodb validation mongoose