Node.js 为什么猫鼬验证不起作用?如何使它起作用?

Node.js 为什么猫鼬验证不起作用?如何使它起作用?,node.js,express,validation,mongoose,Node.js,Express,Validation,Mongoose,我的用户模式有一个名称字段,其类型设置为字符串,但每次将名称更新为其他类型(如数字或布尔值)时,它都会转换为字符串,因此验证不起作用,如何使其不转换为字符串?谢谢 这是我的模型 const userSchema = new mongoose.Schema( { name: { type: String, required: true, trim: true, }, email: { type

我的用户模式有一个名称字段,其类型设置为字符串,但每次将名称更新为其他类型(如数字或布尔值)时,它都会转换为字符串,因此验证不起作用,如何使其不转换为字符串?谢谢

这是我的模型

const userSchema = new mongoose.Schema(
{
    name: {
        type: String,
        required: true,
        trim: true,
        
    },
    email: {
        type: String,
        unique: true,
        required: true,
        trim: true,
        lowercase: true,
        validate(value) {
            if (!validator.isEmail(value)) {
                throw new Error('Input the valid email');
            }
        }
    },
    age: {
        type: Number,
        default: 18,
        validate(value) {
            if (value < 18) {
                throw new Error('You must be equal or older than 18 years old');
            }
        }
    },
    password: {
        type: String,
        required: true,
        minlength: 7,
        trim: true,
        validate(value) {
            if (value.toLowerCase().includes('password', 0)) {
                throw new Error('the password cannot be contain with password');
            }
        }
    }

);

const User = mongoose.model('User', userSchema);

module.exports = User;
但是当我创建新用户时,我不知道为什么

router.patch('/user/me', auth, async (req, res) => {
const updates = Object.keys(req.body);
const isAllowed = [ 'name', 'age', 'email', 'password' ];
const isValidOperation = updates.every((update) => isAllowed.includes(update));

if (!isValidOperation) {
    res.status(400).send({ error: 'Invalid updates' });
}

try {
    
    updates.forEach((update) => (req.user[update] = req.body[update]));
    const user = await User.findByIdAndUpdate(req.user.id, req.user, { runValidators: true, context: 'query' });
    await user.save();
    res.send(user);
} catch (error) {
    res.status(400).send();
}
});