我使用带有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'
}
}
}
有人知道我如何达到预期的回应吗?
答案 0 :(得分:0)
架构强制执行输入类型,主要为您提供验证机制。所以你得到的回应是mongoose告诉你ABC123这是一个字符串不能被转换为' price'这只能是一个数字。如果您想使用自己的验证,只需删除'类型:数字'模式中的引用。