Node.js 验证仅适用于post方法

Node.js 验证仅适用于post方法,node.js,mongodb,express,Node.js,Mongodb,Express,我是node的新手,express需要有关验证的帮助。我能够验证与post方法对应的数据,但对于put方法,数据无法得到验证。要在put方法中验证数据,应该做些什么 下面是用户模型 const userSchema = new Schema({ name: { type: String, minlength: 3, required: true, validate:{ validator:funct

我是node的新手,express需要有关验证的帮助。我能够验证与post方法对应的数据,但对于put方法,数据无法得到验证。要在put方法中验证数据,应该做些什么

下面是用户模型

const userSchema = new Schema({

    name: {
        type: String,
        minlength: 3,
        required: true,
        validate:{
            validator:function(value){
                return value.length >=3
            },
            msg:function(){
                return 'name is less than 3 characters'
            }
        }
    },
const User = mongoose.model('User', userSchema)

module.exports = User
下面是用户的控制器

const express = require('express')
const router = express.Router()
const Customers = require('../model/customers')


router.get('/', (req, res) => {
    Customers.find()
        .then((customer) => {
            res.json(customer)
            console.log(customer)
        })
        .catch(err => res.send(err))
})

router.post('/', async (req, res) => {
    let customerData = new Customers({
        name: req.body.name,
        email: req.body.email,
        mobile: req.body.mobile
    })
    await customerData.save()
        .then((customer) => {
            res.json(customer)
            console.log('customer is....', customer)
        })
        .catch(err => res.send(err))
})

router.put('/:id', async (req, res) => {
    let apiId = req.params.id
    const customerData = await Customers.findByIdAndUpdate(apiId,
        {
            name: req.body.name,
            email: req.body.email,
            mobile: req.body.mobile
        })
    if (customerData) {
        res.json(Object.assign(customerData, req.body))
    }
    else {
        res.status(404).send('Url did not respond')
    }
})

router.delete('/:id', async (req, res) => {
    let apiId = req.params.id
    const customerData = await Customers.findByIdAndRemove(apiId)
    if (customerData) {
        res.send(customerData)
    }
    else {
        res.status(404).send('Url did not respond')
    }
})

module.exports = { customerController: router }
按照猫鼬的说法

Mongoose还支持对update()、updateOne()和, updateMany()和findOneAndUpdate()操作。更新验证器是 默认情况下关闭-您需要指定runValidators选项

因此,您必须设置
runValidators:true

Customers.findByIdAndUpdate(apiId,
        {
            name: req.body.name,
            email: req.body.email,
            mobile: req.body.mobile
        }, { runValidators: true } )
按照猫鼬的说法

Mongoose还支持对update()、updateOne()和, updateMany()和findOneAndUpdate()操作。更新验证器是 默认情况下关闭-您需要指定runValidators选项

因此,您必须设置
runValidators:true

Customers.findByIdAndUpdate(apiId,
        {
            name: req.body.name,
            email: req.body.email,
            mobile: req.body.mobile
        }, { runValidators: true } )

但是在这种情况下,如果我只想编辑一个特定的字段,那么其他字段将显示验证错误。您所说的其他字段是什么意思?查找并删除?我认为查找和删除没有模式验证,它不会创建要验证的新对象。我建议在web服务层而不是db层使用模式验证,请查找joi模块,在web服务层使用模式验证将为您提供更好的性能,并防止在参数无效的情况下执行许多操作,通过拒绝来自web服务层的请求,而不是将其传递到业务层和数据库层。但是在这种情况下,如果我只想编辑一个特定字段,那么其他字段将显示验证错误。您所说的其他字段是什么意思?查找并删除?我认为查找和删除没有模式验证,它不会创建要验证的新对象。我建议在web服务层而不是db层使用模式验证,请查找joi模块,在web服务层使用模式验证将为您提供更好的性能,并防止在参数无效的情况下执行许多操作,通过拒绝来自web服务层的请求,而不是将其传递给业务层和数据库层。