【问题标题】:Mongoose: Validation not being executed when savingMongoose:保存时未执行验证
【发布时间】: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'
    }
});

当我尝试保存它时,如果productsundefinednull 或一个空数组,则不会执行验证,它会在每种情况下用一个空的产品数组保存新订单。验证仅在 products 是一个包含至少一个元素的数组时运行。有什么线索吗?有没有办法让验证在所有情况下都运行?另外,在这种情况下需要做什么?如果我根据需要定义 products 数组,我看不到验证有任何变化......

【问题讨论】:

  • 根据我的经验,不要依赖猫鼬验证。
  • 尝试将其定义为products: { type: [Schema.ObjectId], required: true}。无论如何, undefined 仅使用所需的验证器进行验证。您还可以编写自己的验证器来验证数组长度并像minlength: 5 一样使用它。这个验证器仍然不会覆盖 undefined。
  • @Amiram Korach:谢谢!有用!但是,怎么会?现在我已经涵盖了所有内容,如果数组为空、null 或未定义需要验证它,在其他情况下我的自定义验证器运行。
  • 我只是写了我一直这样做的方式。不知道你写的好不好。
  • 好的。顺便说一句,我认为 minlength 验证仅适用于字符串

标签: arrays node.js mongodb validation mongoose


【解决方案1】:

定义它:

products: {
   type: [Schema.ObjectId],
   required: true,
}

【讨论】:

    猜你喜欢
    • 2018-06-29
    • 2023-03-10
    • 2020-12-30
    • 2016-05-02
    • 2017-08-03
    • 2017-10-06
    • 2019-05-10
    • 1970-01-01
    • 2016-05-07
    相关资源
    最近更新 更多