Node.js Middleware nedir?

533388

Hectopat
Katılım
27 Mart 2022
Mesajlar
4.375
Makaleler
2
Çözümler
54
Anladığım kadarıyla hata mesajları döndüren bir kısım, doğru mudur? Controller içinde hata mesajı dönmek yerine mi bunu kullanıyoruz?
 
Middleware dil bağımsız bir konsepttir. Olayı ise şöyle özetleyelim, bir web isteğinin işlenmesi sürecinde önce HTTP Request alınır. Bu alınan HTTP Request önce sunucu tarafından, sonra sunucuda çalışan yazılıma göre yorumlanarak bir HTTP Response gönderilir. Middleware, isteğin yazılım tarafından işlenmesi seansında uygulanmakta.

Örnek veriyorum bir dil için default pipeline soyle olsun:

Request -> Router -> Controller -> Action
(Bu pipeline ornegi pek de dogru sayilmaz cunku Router da aslinda bir middleware'dir.)

Yani isteginiz alındı, URL ve bilumum parametrelerle doğru controller'daki doğru işlemi çalıştırdı. Mantıklı görünüyor fakat işlerin karışması olası. Atıyorum ki sonradan özel bir hata işleci eklemek istediniz, yani yazılım her hata oluşturduğunda size e-posta göndermesini istiyorsunuz. Bunu oturup bütün Controller'lardaki Action'lara eklemeniz karmaşıklığa ve kendini tekrar etmeye sebep olur. Bu örneğe ek olarak loglama, doğrulama, özel yönlendirme servis örnekleri de verilebilir. Bu noktada yardıma Middleware'lar yetişiyor.

Middleware'ları kullandığınızda sarmal bir yapı oluşmakta. İç içe girmiş halkalar gibi düşünün. Dıştan içe doğru middleware'lar çalışıyor ve en son asıl action çalışıyor. Middleware'lar asenkron da çalışabiliyor., yani eşzamanlı olarak siz loglama yaparken arkada uygulama action'a ilerleyebiliyor.

Ek olarak bunu da okumanızı şiddetle tavsiye ediyorum.
 
Middleware "ara-katman" demek.

Farkli mimaride, farkli uygulamada farkli anlamlar kazanir bu konsept. Hata mesaji seklinde baside indirgenemez.

Teknik olarak hata mesaji processini middleware uzerinde yapabilmen icin hatanin buraya "throw" edilmesi gerekiyor. Yani stack uzerinde kendisinden sonra cagirilan kisimlardaki hataya da erisebilmesi gerekiyor. Bu da her dilde ya da paradigmada mumkun degil. Ornegin aspect oriented programlama yaparsin loglama ve hata duzenlemesini ilgili aspect degerlendirir senin icin. Reactive programlama yaparsin hata durumlarini request'i map eden son fonksiyon ustlenir. Illa middleware yapacak diye bir konsept yok. Ornegin functional programlama ya da AOP yaptiginda "Advice" kullanirsin bunun icin.

Nasil Microsoft MVC ogrenenler dizayn paternin tamamini framework saniyorsa es kaza nodeJs ogrenirken middleware'in tumunu bu sekilde zannedip de yanlis bir sey ogrenmeyin.

Muhtemelen node uzerinde calisan bir framework global olarak catch fonksiyonu tanimlamistir ve senin middleware kullanarak ona catch durumunda ne yapmasi gerektigini bir higher level function ile iletmeni bekliyordur. Yoksa error processing ara katmanda yapilacak diye bir kaide yok, hatta bazi paradigmalara direkt olarak aykiri bir hareket. Bir fonksiyonda alinan hatayi ondan once cagirilan bir fonksiyon bilmek ya da handle etmek zorunda degil.
 
@pottie4r teşekkür ederim. Peki ornek olarak Laravel'de bir middleware olusturunca baska hazir middlewareler geliyor, bunlar da yine ayni mantikla mi calisiyor yani request isteklerini isleme mi tabii tutyor?
 
@pottie4r teşekkür ederim. Peki ornek olarak Laravel'de bir middleware olusturunca baska hazir middlewareler geliyor, bunlar da yine ayni mantikla mi calisiyor yani request isteklerini isleme mi tabii tutyor?
Evet, Laravel ile fazla çalışmadım açıkçası ama büyük frameworklerde bu tip durumlar normaldir.
 

Yeni konular

Geri
Yukarı