如果nodejs和mongoose中有额外的字段,如何断言验证失败

时间:2016-07-07 03:38:51

标签: node.js mongoose

以下是我的架构定义:

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调用时,如果我添加namefamily以外的额外字段,则会正确忽略额外字段,但文档仍然存在于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,我想抛出验证错误。

2 个答案:

答案 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);
}