nhandledPromiseRejectionWarning: ValidationError: ошибка проверки пользователя: пароль: требуется путь `пароль` - PullRequest
1 голос
/ 06 августа 2020

Я пытаюсь зарегистрировать пользователей, используя node и mon go, но получаю 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 Ответ

0 голосов
/ 07 августа 2020

Так что да, я нашел проблему. поля являются обязательными, поэтому, если вы попытаетесь вставить нового пользователя с пустыми полями, вы получите эту ошибку. Поля были пустыми, потому что промежуточное ПО 'body-parser' обрабатывает только данные JSON и urlencoded, а не multipart. Поэтому мне пришлось изменить свой индексный файл на

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

. Я также изменил тип содержимого в Postman на «X- www-form-urlencoded». Теперь тело запроса заполнено, и пользователь вставлен правильно

...