【发布时间】:2013-12-30 07:12:14
【问题描述】:
猫鼬文档声称,如果验证失败,它将不会存储数据。但是,以下代码确实存储了发布到 /api/orders 的无效数据。 console.write 确实打印了预期的错误,但此时数据已经在数据库中。
http://mongoosejs.com/docs/api.html#document_Document-validate“这个 方法称为预保存,如果违反验证规则,则保存 被中止并将错误返回给您的回调。”
代码:
app.post('/api/orders', function(req, res) {
var OrderItem = new Order(req.body);
OrderItem.save(function (err) {
if (err) {
console.log(req.body);
console.log(err);
}
res.send(OrderItem);
});
});
var orderSchema = mongoose.Schema({
user: {type: String, required: true, match: /^[a-zA-Z]{1,8}$/}, //\p{L}
lines: [{
name: String,
count: {type: Number, required: true, min: 0, max: 5}
}]
});
var Order = mongoose.model('Order', orderSchema);
无效数据:
{ user: '0123456789', lines: [] }
错误信息:
{ message: 'Validation failed',
name: 'ValidationError',
errors:
{ user:
{ message: 'Path `user` is invalid (0123456789).',
name: 'ValidatorError',
path: 'user',
type: 'regexp',
value: '0123456789' } } }
我想我误解了它应该如何工作,但我找不到错误。
【问题讨论】:
-
你可以试试 if (err) console.log(err);而不是 console.log(err);并分享结果?
-
您能否编辑您的问题以包含验证失败但正在保存的文档?
-
您如何断定项目已保存?因为使用完全相同的代码,我得到一个无效条目的验证错误,并且它根本没有存储在数据库中。
-
我可以在我的数据库中看到无效数据。我现在将添加无效数据和错误。