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

等待 - 捕获错误 - UnhandledPromiseRejectionWarning

批量删除如何工作?

7月工作知识总计:

未处理的承诺拒绝 |重启命令

未处理的承诺拒绝警告(Cordova Angular)