如何解决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.
,
您还可以将在邮递员中输入的值放在这里吗,以便我给您答案
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。