1

我正在尝试使用 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 进行测试。

4

2 回答 2

2

所以是的,我发现了问题。这些字段是必需的,因此如果您尝试使用空字段插入新用户,则会收到该错误。这些字段是空的,因为“body-parser”中间件只处理 JSON 和 urlencoded 数据,而不是多部分。所以我不得不将我的索引文件更改为

app.use(bodyParser.urlencoded({
extended: true
}));

我还将 Postman 中的内容类型更改为“X-www-form-urlencoded”。现在请求正文已填充并且用户已正确插入

于 2020-08-06T21:23:20.563 回答
0

我也遇到了这个错误。在您的用户模型中删除required:true所有字段,如下所示:

email: {
    type: String,
    unique: true
}
于 2021-07-28T07:08:09.120 回答