findOneAndUpdate中的runValidators = true在更新数据之前未验证架构

时间:2019-06-12 12:22:53

标签: node.js mongodb validation mongoose mongoose-schema

我的模式如下(video_schema.js):

var Video_schema = new Schema({
    video_url: {
        type: Map,
        of: mongoose.SchemaTypes.Url,
        required: true   
    },
    description: {
        type: Map,
        of: String,
        required: true
    },
    created_date_time:{type: Date, default:Date.now},
    modified_date_time:{type:Date, default:Date.now}
},{
    versionKey: false 
});
module.exports = mongoose.model('video', Video_schema);

以下是我用于更新数据的代码(video.js):

var video = require('../models/video_schema');
router.put('/:id', async(req, res)=>{
    await video.findOneAndUpdate(req.params.id,{$setOnInsert: req.body},{upsert: true,'new': true,runValidators: true,setDefaultsOnInsert: true}, function (err, newvideo) {
        if (err) {
            res.status(HttpStatus.BAD_REQUEST).send(err.message);
        } else {
            res.status(HttpStatus.OK)
            .send(newvideo)
        }
    });
});

我正在尝试使用PUT请求更新数据,但是它没有验证架构,并且如果未在PUT请求主体中指定必填字段,也不会给出错误 我的身体是:

{
    "description":{"en":"dsfsdfdsfdsf"}   
 }

理想情况下,此请求显示video_url字段的错误 相反,它正在更新描述数据 我的PUT回应:

{
    "_id": "5cff88f5ccdf852bf598aedc",
    "video_url": {
        "en": "http://10.75.12.140:3009/videos"
    },
    "description": {
        "en": "dsfsdfdsfdsf"
    }
}

我希望在PUT请求中需要所有字段,并且也要根据模式进行相应的验证。

我需要启用任何功能来实现此目的吗?

谢谢

0 个答案:

没有答案