Giriş
Mongoose, MongoDB için güçlü veri doğrulama ve şema validasyon özellikleri sunar. Bu makale, Mongoose’da veri doğrulamanın nasıl yapıldığına ve şema validasyonlarının nasıl kullanıldığına dair detaylı bilgileri içerir.
Mongoose’da Veri Doğrulama
Veri doğrulama, veritabanına kaydedilen verilerin belirli kurallara uygun olmasını sağlar. Mongoose, şema düzeyinde çeşitli doğrulama yöntemleri sunar.
Temel Doğrulama Türleri
Mongoose şemaları, çeşitli doğrulama türlerini destekler:
required
: Alanın zorunlu olup olmadığını belirtir.
min
ve max
: Sayısal alanlar için minimum ve maksimum değerleri belirler.
enum
: Bir dizenin belirli değerlerden birini almasını sağlar.
const userSchema = new mongoose.Schema({
name: { type: String, required: true },
age: { type: Number, min: 18, max: 65 },
email: { type: String, required: true },
role: { type: String, enum: ['user', 'admin'] }
});
Özel Doğrulayıcılar
Mongoose, özel doğrulayıcılar tanımlamanıza olanak tanır. Bu, daha karmaşık doğrulama kuralları için kullanışlıdır.
userSchema.path('email').validate((email) => {
const emailRegex = /^([\w-.]+@([\w-]+\.)+[\w-]{2,4})?$/;
return emailRegex.test(email);
}, 'Geçersiz e-posta adresi.');
Şema Validasyonları
Pre ve Post Hooks
Mongoose, şema işlemleri öncesinde ve sonrasında çalıştırılacak fonksiyonları tanımlamanıza izin verir. Bu “hooks”, veri işlemlerini özelleştirmek için kullanılabilir.
userSchema.pre('save', function(next) {
if (!this.isModified('password')) return next();
this.password = hashPassword(this.password);
next();
});
userSchema.post('save', function(doc) {
console.log('%s kullanıcısı kaydedildi.', doc._id);
});
Sanitization (Veri Temizleme)
Veri temizleme, kaydedilmeden önce verilerin biçimini düzenlemek için kullanılır. Örneğin, metin alanlarını kesmek veya küçük harfe çevirmek için:
userSchema.pre('save', function(next) {
this.name = this.name.trim();
this.email = this.email.toLowerCase();
next();
});
Hata Yönetimi
Doğrulama Hatalarını Yakalama
Doğrulama hataları, save
metodunu çağırdığınızda bir hata olarak döner. Bu hataları yakalayıp kullanıcıya uygun bir geri bildirim sağlamak önemlidir.
const user = new User({ name: 'Ahmet', age: 17 });
user.save((err) => {
if (err) {
return handleError(err);
}
// Kullanıcı kaydedildi
});
Hata Mesajları
Mongoose, hata mesajlarını özelleştirmenize olanak tanır. Bu, kullanıcı dostu geri bildirimler için faydalıdır.
const userSchema = new mongoose.Schema({
email: {
type: String,
validate: {
validator: function(v) {
return /^([\w-.]+@([\w-]+\.)+[\w-]{2,4})?$/.test(v);
},
message: props => `${props.value} geçerli bir e-posta adresi değil!`
}
}
});
Sonuç
Mongoose’daki veri doğrulama ve şema validasyon özellikleri, veritabanı işlemlerinde tutarlılık ve güvenlik sağlar. Bu makalede, Mongoose’da veri doğrulama, özel doğrulayıcılar, pre/post hooks ve hata yönetimi konularında detaylı bilgiler sunulmuştur. Bu bilgiler ışığında, kendi Mongoose uygulamalarınızda etkili veri yönetimi stratejileri geliştirebilirsiniz.