gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-11-01 00:06:12 25 4
gpt4 key购买 nike

以下是我的架构定义:

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 中。在这种情况下如何抛出验证错误?

Controller 代码:

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,我想抛出验证错误。

最佳答案

您可以设置 strict模式选项 'throw' 导致在创建新文档时出现模式定义之外的字段时抛出异常:

var StudentSchema = new Schema({
name: String,
family: String
}, { strict: 'throw' });

但是是异常,不是校验错误,所以需要用try/catch来处理:

try {
Student.create(req.body, callback);
}
catch (e) {
callback(e);
}

关于node.js - 如果nodejs和mongoose中有额外的字段,如何断言验证失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38237192/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com