如何在抛出CastError之前验证Mongoose路径?

时间:2015-01-24 00:04:44

标签: node.js mongoose

我使用带有Nodejs的Mongoose来解决这个CastError行为。

这是我的架构:

var ItemSchema = new Schema({
    price : {
        required : true,
        type     : Number
    }
});

var CatalogSchema = new Schema({
    name : String,
    items : [ItemSchema]
});

ItemSchema.path('price').validate(function(price){
    // This code will not run due to CastError
    return !isNaN(parseFloat(price));
});

使用上面的模式,当我尝试更新模式并将无效值传递给price时(即' ABC123'),Mongoose会在任何验证函数出现之前立即抛出错误在.path('price')

上运行

实际回应:

{ 
    name: 'CastError',
    type: 'number',
    value: 'ABC123',
    path: 'price'
}

预期回应:

{
    name : 'ValidationError',
    errors : {
        'items.0.price' : {
            name: 'CastError',
            path: 'price',
            type: 'number',
            value: 'ABC123'
        }
    }
}

有人知道我如何达到预期的回应吗?

1 个答案:

答案 0 :(得分:0)

架构强制执行输入类型,主要为您提供验证机制。所以你得到的回应是mongoose告诉你ABC123这是一个字符串不能被转换为' price'这只能是一个数字。如果您想使用自己的验证,只需删除'类型:数字'模式中的引用。