以下是我的架构定义:
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var StudentSchema = new Schema({
name: String,
family: String
}, {strict: 'throw' });
module.exports = mongoose.model('Student', StudentSchema);
现在在进行POST调用时,如果我添加name
和family
以外的额外字段,则会正确忽略额外字段,但文档仍然存在于mongodb中。在这种情况下如何抛出验证错误?
控制器代码:
try {
bird.save(function (err) {
if (err) {
res.statusCode = 404;
return res.send({message: err});
}
res.json({message: 'Student created!'});
});
}
catch (e) {
console.log("error");
callback(e);
}
如果我传递了以下有效负载,它将继续存在于mongoDB中:
{
"name": "name1",
"family": "family1",
"dummy": "dummy"
}
理想情况下,由于它有一个额外的字段dummy
,我想抛出验证错误。
答案 0 :(得分:0)
你可以使用 pre-save validation,但是mongoose会忽略额外的字段
你也可以这样做:
var student = new Student({
name:req.body.name,
family:req.body.family
});
student.save(callback);
答案 1 :(得分:0)
您可以将架构的strict
选项设置为'throw'
,以便在创建新文档时,当架构中定义的字段之外的字段存在时,会引发异常:
var StudentSchema = new Schema({
name: String,
family: String
}, { strict: 'throw' });
但它是一个例外,而不是验证错误,所以你需要使用try / catch来处理它:
try {
Student.create(req.body, callback);
}
catch (e) {
callback(e);
}