Giriş
Mongoose middleware, Mongoose modellerindeki işlemler öncesinde ve sonrasında çalışan fonksiyonlar bütünüdür. Bu makalede, Mongoose’da middleware kullanımı, ön ve son işlem middleware’lerinin nasıl tanımlandığı ve pratikte nasıl kullanılabileceği üzerine detaylı bilgiler sunulacaktır.
Mongoose Middleware Nedir?
Mongoose middleware, Mongoose işlemlerinin öncesinde veya sonrasında belirli işlevlerin otomatik olarak gerçekleştirilmesini sağlar. Bu, pre
(öncesi) ve post
(sonrası) olmak üzere iki ana kategoride ele alınır.
Middleware Türleri
- Doküman Middleware:
save
, remove
gibi doküman düzeyindeki işlemler için kullanılır.
- Sorgu Middleware:
find
, update
, delete
gibi sorgu düzeyindeki işlemler için kullanılır.
- Model Middleware: Model düzeyinde çalışır ve genellikle
insertMany
gibi işlemlerde kullanılır.
Ön İşlem (Pre) Middleware
Kullanımı
Ön işlem middleware’leri, belirli bir işlem gerçekleşmeden hemen önce çalıştırılır.
userSchema.pre('save', function(next) {
// Şifre hash'leme veya veri temizleme gibi işlemler
next();
});
Asenkron İşlemler
Asenkron işlemleri desteklemek için, async/await
yapısını kullanabilirsiniz.
userSchema.pre('save', async function() {
this.password = await hashPassword(this.password);
});
Son İşlem (Post) Middleware
Kullanımı
Son işlem middleware’leri, belirli bir işlem tamamlandıktan sonra çalıştırılır.
userSchema.post('save', function(doc, next) {
// Log kaydı veya ek işlemler
next();
});
Hata Yönetimi
post
middleware’lerinde hata yönetimi, işlem sonrasında oluşabilecek hatalar için önemlidir.
userSchema.post('save', function(err, doc, next) {
if (err) {
// Hata işleme
} else {
next();
}
});
Pratik Uygulamalar
Şifreleme ve Güvenlik
Kullanıcı şifrelerini pre
middleware ile hash’lemek, güvenliği artırır.
userSchema.pre('save', async function() {
if (this.isModified('password')) {
this.password = await hashPassword(this.password);
}
});
Veri Temizleme ve Validasyon
Öncesi middleware ile gelen verilerin formatını düzenleyebilir ve validasyon işlemleri gerçekleştirebilirsiniz.
userSchema.pre('save', function() {
this.email = this.email.toLowerCase().trim();
});
Loglama ve İzleme
İşlemler sonrası middleware ile veritabanı işlemlerini loglamak, hata ayıklama ve izleme için yararlıdır.
userSchema.post('save', function(doc) {
logger.info(`Yeni kullanıcı kaydedildi: ${doc._id}`);
});
Middleware Yönetimi ve İpuçları
Zincirleme
Birden fazla pre
veya post
middleware’ini zincirleme yöntemiyle kullanabilirsiniz.
Performans Düşünceleri
Middleware’lerin performans üzerinde etkisi olabileceğinden, gereksiz middleware kullanımından kaçının.
Test ve Hata Yönetimi
Middleware’lerinizi kapsamlı şekilde test etmek, beklenmeyen davranışların önüne geçer.
Sonuç
Mongoose middleware’ler, Mongoose işlemlerine ek işlevler eklemek ve uygulamanın genel akışını yönetmek için güçlü araçlardır. Bu makalede, Mongoose’da ön ve son işlem middleware’lerinin nasıl kullanılacağı, pratik uygulamaları ve yönetim ipuçları üzerinde durulmuştur. Doğru kullanıldığında, middleware’ler uygulamanızın verimliliğini ve güvenliğini artırabilir, karmaşık işlemleri basitleştirebilir.