MongooseError [ValidatorError]:路径`encry_password`是必需的

问题描述

嗨,我是Node js的新手,我在通过邮递员encry_password测试代码时遇到错误,不知道我在哪里错,请检查并修复错误

用户/模型是我的用户模型,其中定义了我在应用中使用的所有架构

const mongoose = require('mongoose');
const crypto = require('crypto');
const uuidv1 = require('uuid/v1');

//const Schema = new mongoose.Schema();

const userSchema = new mongoose.Schema({
    name: {
        type: String,required: true,maxlength: 32,trim: true
    },lastname: {
        type: String,email: {
        type: String,trim: true,unique: true
    },userinfo: {
        type: String,encry_password: {
        type: String,required: true
    },salt: String,role: {
        type: Number,default: 0
    },purchases: {
        type: Array,default: []
    }
},{
        timestamps: true
    });

userSchema.virtual('password')
    .set(function (password) {
        this._password = password
        this.salt = uuidv1();
        this.secure_password = this.securePassword(password);
    })
    .get(function () {
        return this._password
    })

userSchema.methods = {

    autheticate: function (plainpassword) {
        return this.securePassword(plainpassword) === this.secure_password
    },securePassword: function (plainpassword) {
        if (!plainpassword) {
            return "";
        }
        try {
            return crypto.createHmac('sha256',this.salt)
                .update(plainpassword)
                .digest('hex');
        }
        catch (err) {
            return "";
        }
    }
}

module.exports = mongoose.model('User',userSchema);

Auth.js

这是我的身份验证控制器,我在其中定义我的注册逻辑,请检查此处的错误

 const User = require("../models/user")
    const { check,validationResult } = require('express-validator');
    
    //SIGNUP VALIDATION
    exports.signup = (req,res) => {
        const errors = validationResult(req);
        if (!errors.isEmpty()) {
            return res.status(422).json({
                error: errors.array()[0].msg
            })
        }
        console.log('req.body: ',req.body)
        const user = new User(req.body)
        user.save((err,user) => {
            if (err) {
                console.log("ERROR:",err)
                return res.status(400).json({
                    err: "not able to connect"
                });
            }
            res.json({
                name: user.name,lastname: user.lastname,email: user.email,id: user._id,password:user.password
            });
        });
    
    };

解决方法

您在架构中定义了encry_password字段并将其设置为required:true,但是根据您的逻辑,您没有为encry_password提供值,错误只是向您显示命名字段不能为空。 尝试将代码重构为以下代码:

//SIGNUP VALIDATION
exports.signup = (req,res) => {
    const errors = validationResult(req);
    if (!errors.isEmpty()) {
        return res.status(422).json({
            error: errors.array()[0].msg
        })
    }
    console.log('req.body: ',req.body)
    // do this instead
    const userDetails = {
     name: req.body.name,email: req.body.email,lastname:req.body.lastname,userInfo:req.body.userInfo,salt:req.body.salt
     encry_password:req.body.password
     } 

    const user = new User(userDetails)
    user.save().then((user) => {
          res.json({
            name: user.name,lastname: user.lastname,email: user.email,id: user._id,password:user.password
        });    
    }).catch(err=>{
       if (err) {
            console.log("ERROR:",err)
            return res.status(400).json({
                err: "not able to connect"
            });
        }
     });

};
,

您定义了一个encry_password字段及其必填字段:在您的模式中为true,但在参数中,您未提供encry_password。

所以有两种方法可以解决此错误。

  1 ->
    remove  required: true from your schema.
  2->
    You must need to provide encry_password field in req.body.
,

您还可以将在邮递员中输入的值放在这里吗,以便我给您答案