unhandledPromiseRejectionWarning:ValidationError:用户验证失败:密码:需要路径“密码”
Posted
技术标签:
【中文标题】unhandledPromiseRejectionWarning:ValidationError:用户验证失败:密码:需要路径“密码”【英文标题】:nhandledPromiseRejectionWarning: ValidationError: user validation failed: password: Path `password` is required 【发布时间】:2020-11-26 16:25:42 【问题描述】:我正在尝试使用 node 和 mongo 注册用户,但我收到了这个 ValidationError:
unhandledPromiseRejectionWarning:ValidationError:用户验证失败:密码:路径password
是必需的。用户名:路径username
是必需的。电子邮件:路径email
是必需的。
这是我的注册功能。
exports.signup = async function (request, res, next)
try
let user = await db.User.create(request.body);
console.log(user);
let id,email,username = user;
let token = jwt.sign(
id,
email,
username
,
process.env.SECRET_KEY
);
return res.status(200).json(
id,
username,
token
)
catch (err)
if (err.code === 11000)
err.message = "sorry, username/email are token";
return next(
status: 400,
message: err.message
)
这是我的用户模型
const userSchema = new mongoose.Schema(
email:
type: String,
required: true,
unique: true,
,
username:
type: String,
required: true,
unique: true
,
password:
type: String,
required: true,
,
profileImageUrl:
type: String,
,
messages:[
type:mongoose.Schema.Types.ObjectId,
ref:'Message'
]
)
userSchema.pre('save', async function (next)
try
if (!this.isModified('password'))
return next();
let hashedPassword = await bcrypt.hash(this.password, 10);
this.password = hashedPassword;
return next();
catch (err)
return next(err);
);
const User = mongoose.model("user", userSchema);
module.exports = User;
注意:我正在使用 Postman 进行测试。
【问题讨论】:
【参考方案1】:所以是的,我发现了问题。这些字段是必需的,因此如果您尝试使用空字段插入新用户,则会收到该错误。这些字段是空的,因为“body-parser”中间件只处理 JSON 和 urlencoded 数据,而不是多部分。所以我不得不将我的索引文件更改为
app.use(bodyParser.urlencoded(
extended: true
));
我还将 Postman 中的内容类型更改为“X-www-form-urlencoded”。现在请求正文已填充,用户已正确插入
【讨论】:
【参考方案2】:我也遇到了这个错误。
在您的用户模型中删除所有字段中的required:true
,如下所示:
email:
type: String,
unique: true
【讨论】:
以上是关于unhandledPromiseRejectionWarning:ValidationError:用户验证失败:密码:需要路径“密码”的主要内容,如果未能解决你的问题,请参考以下文章
[Unhandled promise rejection: TypeError: null is not an object (evaluating '_reactNativeImageCropPic