У меня есть следующая ловушка предварительной проверки в моей модели пользователя:
UserSchema.pre<IUser>('validate', async function (next: NextFunction): Promise<void> {
if (!this.isModified('password')) {
return next()
}
if (this.password.length < 8) {
this.invalidate(
'password',
'Invalid password ...',
''
)
console.log(this.password)
}
this.password = await bcrypt.hash(this.password, 12)
})
Схема:
const UserSchema: mongoose.Schema = new mongoose.Schema({
login: {
required: true,
type: String,
unique: 'Le nom d\'utilisateur `{VALUE}` est déjà utilisé'
},
mail: {
required: true,
type: String,
unique: 'Le mail `{VALUE}` est déjà utilisé'
},
password: { required: true, type: String, /*select: false*/ },
// In test env auto validate users
isVerified: { type: Boolean, default: config.env !== 'test' ? false : true },
profilPic: { type: mongoose.Schema.Types.ObjectId, ref: 'Image' },
}, { timestamps: true })
Однако при выполнении
try {
await User.create({ login: 'user2', mail: 'user1@mail.com', password: '123' })
} catch (error) {
console.log(error)
}
Iесть журнал 123
, который указывает, что код входит во второй if
в предварительном хуке, но поскольку журнал идет после this.invalidate
, я не понимаю, почему не выдается ошибка.
Я успешно использовал тот же хук в некоторых других моделях с более сложными операциями без ошибок.
Я действительно не понимаю, почему этот не работает