Express v5 yayınlandı - Node.js framework'ünde yeni bir dönem
(expressjs.com)- İlk v5 PR'ı 10 yıl önce açılmıştı; sonunda merge edildi ve yayımlandı
- Gelecek sürümlerde daha etkili değişiklikleri hayata geçirmek için kasıtlı olarak sadeleştirilmiş bir sürüm
- Ayrıca bunun, Express'in yeniden hareketlendiğini Node.js ekosistemine duyurma amacı da var
Başlıca değişiklikler
-
Node.js sürüm desteği değişiklikleri
- Node.js 0.10 desteği sonlandırıldı, destek Node 18 ve üzeri olarak değiştirildi
- Eski Node.js sürümlerini destekleme nedeniyle geciken performans ve bakım açısından önemli değişiklikler sorunu çözüldü
- Yeni dil ve runtime özelliklerinin benimsenmesi, artık gerekli olmayan bağımlılıkların kaldırılması mümkün hale geldi
- Eski Node.js sürümlerini kullanan şirketlerin yaşadığı zorlukların farkında olarak, HeroDevs ile iş birliği yapılıp v4 desteği bittikten sonra da kritik güvenlik yamaları sunan "süresiz destek" sağlanacak
-
Yol eşleme ve regex değişiklikleri
path-to-regexpkütüphanesi 0.x'ten 8.x'e güncellendi ve yıllar içindeki birçok değişiklik birleştirildi- Regex alt ifadeleri (ör.
/:foo(\\d+)) desteği kaldırıldı- ReDoS saldırılarını önlemek için kaldırıldı
- Geçiş yöntemi: sağlam input doğrulama kütüphaneleri kullanılması öneriliyor
- Yaygın yol kalıpları için sadeleştirilmiş desenler eklendi
:name?,{:name}olarak değişti*,*nameolarak değişti(,),[,],?,+,!karakterleri ayrılmış karakterler olarak eklendi
- Sıralı sayısal parametre desteği kaldırıldı. Artık tüm parametrelere isim verilmesi gerekiyor
-
Promise desteği
- Middleware içinde oluşan hatalar nedeniyle rejected olan Promise'ler için destek eklendi
- Resolved Promise içinde
nextçağrısı buna dahil değil - Artık çoğu durumda middleware şu şekilde yazılabilir:
app.use(async (req, res, next) => { req.locals.user = await getUser(req); next(); });
-
Body parser değişiklikleri
- CVE-2024-45590 azaltımı için urlencoded body derinliğini özelleştirme seçeneği eklendi (varsayılan 32)
- Artık kullanılmayan
bodyParser()birleşik middleware'i kaldırıldı req.bodyartık her zaman{}olarak başlatılmıyorurlencodedparser'ınextendedvarsayılanı false olarak değiştirildi- Brotli kayıpsız veri sıkıştırma desteği eklendi
-
Artık kullanılmayan method signature'ların kaldırılması
res.redirect('back')veres.location('back'): artık'back'sihirli string'i desteklenmiyor. Bunun yerine açıkçareq.get('Referrer') || '/'kullanılmalıres.send(status, body)veres.send(body, status)signature'ları:res.status(status).send(body)kullanılmalıres.send(status)signature'ı: basit status yanıtları içinres.sendStatus(status), opsiyonel body ile status code göndermek içinres.status(status).send()kullanılmalı- Diğer artık kullanılmayan method signature'lar da kaldırıldı (ayrıntılar için migration guide'a bakın)
-
Geçiş ve güvenlik rehberi
- v4'ten v5'e geçen geliştiriciler için ayrıntılı bir migration guide sunuluyor
- Express'in güvenli ve emniyetli kullanımı için kullanıcı girdisi doğrulama ve güvenlik pratikleri gibi alanlarda önemli içgörüler sağlayan kapsamlı bir tehdit modeli sunuluyor
GN⁺ görüşü
- Express v5, Express'in Node.js ekosisteminde yeniden hareketlendiğini duyurmaya odaklanan bir sürüm. Eski Node.js sürümlerinin bırakılması, güvenlik sorunlarının çözülmesi ve bakımın sadeleştirilmesine odaklanıyor
- Bu sürüm, ekosistemdeki engelleri kaldırmak ve gelecekteki sürümlerde daha büyük etkisi olan değişiklikleri mümkün kılmak için bilinçli olarak sade tutuldu
- Express, Node.js için hızlı, opinionated olmayan ve minimal bir web framework'ü olma felsefesine sahip. Bu yaklaşım, kullanıcı girdisi doğrulama ve güvenlik pratikleri gibi alanlarda önemli içgörüler sağlıyor
- Express v5'e geçiş için ayrıntılı bir rehber ve kapsamlı bir tehdit modeli sunularak geliştiricilerin Express'i güvenli ve istikrarlı şekilde kullanmasına yardımcı olunuyor
- Express projesinin yeni yöneticileri, Express ekosistemini istikrarlı ve güvenilir bir araç haline getirmeyi hedefliyor. Bunun için toplulukla birlikte sorunları çözüp iyileştirmeler yapmayı planlıyor
4 yorum
Ah, sonunda
promisedesteği gelmiş. Biz hâlâexpressi çok kullanıyoruz haha; güzel haber.Çoğunlukla
nestjse geçildiği için doğrudan kullanma ihtiyacı pek kalmıyor. Neredeyse servlet'i doğrudan kullanmakla aynı şey.Sonunda promise hatalarını işleyebiliyor ama artık bu saatten sonra özellikle kullanmak için bir neden olduğunu pek sanmıyorum
Hacker News yorumları
Wes’e ve ekibe teşekkürlerimi iletmek istiyorum. v5 PR’ının açılmasının üzerinden 10 yıl geçtiğini anlayabilmek için iki kez okumam gerekti. Bu projenin ataleti değiştirmek için muazzam bir çaba gerekmiş olmalı. Yeni bölümü kutluyorum
Express ekibini tebrik ediyorum. Başka birçok Node JS web sunucusu çatısı var ama Express ihtiyaç duyduğum her şeyi sağladığı için başka bir şeye geçmedim. Umarım bu böyle devam eder
Express’in hâlâ
latestolmadığını belirtiyorWes’e ve ekibin çalışmalarına teşekkürler. Express hâlâ nodejs üzerinde en çok tercih ettiğim seçenek ve aktif olarak bakımı yapılıyor olması güzel
v5 sürümünün neden 10 yıl sürdüğünü merak ediyor
perl 6’ya bir gönderme
Yanıtı yolun girdisinin bir parçası olarak dahil etme fikri 2010’lardan kalma gibi görünüyor. Bugün çoğu şey, isteği alıp yanıt döndüren yollara sahip. Bu, HTTP ile daha iyi örtüşüyor
"Öncekini kurumsal bir şirkete devredip destek sağlama" modelini daha önce görmediğini söylüyor
Express’in koa, fastify vb. ile nasıl karşılaştırıldığını merak ediyor