nhandledPromiseRejectionWarning: ValidationError: ошибка проверки пользователя: пароль: требуется путь `пароль`
Я пытаюсь зарегистрировать пользователей с помощью 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, чтобы проверить это.
2 ответа
Так что да, я нашел проблему. поля являются обязательными, поэтому, если вы попытаетесь вставить нового пользователя с пустыми полями, вы получите эту ошибку. Поля были пустыми, потому что промежуточное ПО 'body-parser' обрабатывает только данные JSON и urlencoded, а не multipart. Поэтому мне пришлось изменить свой индексный файл на
app.use(bodyParser.urlencoded({
extended: true
}));
Я также изменил тип содержимого в Postman на "X-www-form-urlencoded". Теперь тело запроса заполнено, и пользователь вставлен правильно
Я тоже столкнулся с этой ошибкой. В вашей пользовательской модели удалите "required:true" во всех полях. как это письмо: {type: String,unique: true,}