猫鼬:内置验证对SchemaType的其他属性不起作用,例如min,max,minlength,maxlength等

时间:2019-02-18 20:33:31

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

我是猫鼬(MongoDB)和Nodejs的新手,我正在为CRUD操作创建RestFul服务,但是我的问题是,对于Schema表达式,在内置的猫鼬验证中未考虑SchemaType的其他属性,其中它仅在考虑必需的属性。请在下面找到我的模型供您参考:

const mongoose = require('mongoose');
const Schema = mongoose.Schema;

let ProductSchema = new Schema({
    name: {
            type: String, 
            required: true, 
            minlength:2,
            maxlength:10 
          },
    price:{
            type: Number, 
            required:true,
            min:2, 
            max:100
          }, 
})

//Export the model

module.exports = mongoose.model('Product', ProductSchema);

因此在上述模型中,存在诸如Number数据类型的min,max和String数据类型的minlength和maxLength之类的属性,这些属性在保存到MongoDB中之前根本没有考虑进行验证。

我是否缺少任何配置?我已经浏览过猫鼬的文档,也浏览了stackoverflow的很多帖子,但是我没有得到关于此的任何信息。

这也是我的控制器:

const Product = require('../models/product.model');

// Simple version, without validation or sanitation

exports.test = function (req,res) {
    res.send('Greetings from the Test Controller!');
};

exports.product_create = function (req,res,next) {
    let product = new Product(
            {
                name: req.body.name,
                price: req.body.price
            }
        );

    product.save(function (err) {
                if(err){
                    return next(err);
                }
                res.send('Product created Successfully');
            }
    )

};

exports.product_details = function (req,res, next) {
    Product.findById(req.params.id, function (err, product){
        if(err) {
            return next(err);
        }
        res.send(product);
    }) 
};

exports.product_update = function (req, res, next) {
    Product.findOneAndUpdate(req.params.id, {$set: req.body},opts, function (err, product){
        if(err) return next(err);
        res.send('Product Updated');
    })
};

exports.product_delete = function (req,res,next) {
    Product.findOneAndRemove(req.params.id, function (err) {
        if(err) return next(err);
        res.send('Deleted product');
    })
};

如果我缺少某些东西,仍然需要将其整合进来,请指导我。谢谢。

0 个答案:

没有答案