Express v5 dirilis - Era baru framework Node.js
(expressjs.com)- PR v5 pertama diajukan 10 tahun lalu, dan akhirnya di-merge & dipublikasikan
- Rilis ini sengaja dibuat sederhana untuk memungkinkan perubahan yang lebih berdampak pada rilis-rilis berikutnya
- Ini juga merupakan cara untuk memberi tahu ekosistem Node.js bahwa Express kembali bergerak
Perubahan utama
-
Perubahan dukungan versi Node.js
- Dukungan untuk Node.js 0.10 dihentikan, dan kini berubah menjadi mendukung Node 18 ke atas
- Ini menyelesaikan masalah tertundanya perubahan penting untuk performa dan pemeliharaan akibat harus mendukung versi Node.js lama
- Kini dimungkinkan untuk mengadopsi fitur bahasa dan runtime baru, serta menghapus dependensi yang tidak lagi dibutuhkan
- Menyadari kesulitan perusahaan yang masih menggunakan versi Node.js lama, mereka bermitra dengan HeroDevs untuk menyediakan "dukungan tanpa batas waktu" yang tetap memberi patch keamanan penting bahkan setelah dukungan v4 berakhir
-
Perubahan pencocokan path dan regex
- Library
path-to-regexpdiperbarui dari 0.x ke 8.x, menggabungkan berbagai perubahan selama bertahun-tahun - Dukungan untuk subekspresi regex (misalnya
/:foo(\\d+)) dihentikan- Dihapus untuk mencegah serangan ReDoS
- Cara migrasi: disarankan menggunakan library validasi input yang andal
- Termasuk pola yang disederhanakan untuk pola path umum
:name?diubah menjadi{:name}*diubah menjadi*name(,),[,],?,+,!ditambahkan sebagai karakter yang direservasi
- Dukungan untuk parameter numerik berurutan dihentikan. Semua parameter sekarang harus diberi nama
- Library
-
Dukungan Promise
- Dukungan ditambahkan untuk Promise yang ditolak akibat error yang terjadi di middleware
- Ini tidak mencakup pemanggilan
nextdari Promise yang berhasil diselesaikan - Dalam kebanyakan kasus, kini middleware dapat ditulis seperti berikut:
app.use(async (req, res, next) => { req.locals.user = await getUser(req); next(); });
-
Perubahan body parser
- Ditambahkan opsi untuk menyesuaikan kedalaman body urlencoded guna mitigasi CVE-2024-45590 (default 32)
- Middleware gabungan
bodyParser()yang sudah deprecated dihapus req.bodytidak lagi selalu diinisialisasi sebagai{}- Nilai default
extendedpada parserurlencodeddiubah menjadi false - Dukungan kompresi data lossless Brotli ditambahkan
-
Penghapusan method signature yang sudah deprecated
res.redirect('back')danres.location('back'): tidak lagi mendukung magic string'back'. Sebagai gantinya, gunakanreq.get('Referrer') || '/'secara eksplisit- Signature
res.send(status, body)danres.send(body, status): gunakanres.status(status).send(body) - Signature
res.send(status): untuk respons status sederhana gunakanres.sendStatus(status), dan untuk mengirim status code dengan body opsional gunakanres.status(status).send() - Signature method deprecated lainnya juga dihapus (lihat migration guide untuk detail)
-
Panduan migrasi dan keamanan
- Disediakan migration guide yang detail bagi pengembang yang bermigrasi dari v4 ke v5
- Disediakan threat model yang komprehensif, memberikan wawasan penting tentang area seperti validasi input pengguna dan praktik keamanan agar Express dapat digunakan dengan aman dan selamat
Opini GN⁺
- Express v5 adalah rilis yang berfokus memberi tahu ekosistem Node.js bahwa Express kembali bergerak. Fokusnya ada pada penghentian dukungan versi Node.js lama, penyelesaian masalah keamanan, dan penyederhanaan pemeliharaan
- Rilis ini sengaja dibuat sederhana untuk menghilangkan hambatan di ekosistem dan memungkinkan perubahan yang lebih berdampak pada rilis mendatang
- Express memiliki filosofi sebagai web framework untuk Node.js yang cepat, tidak opinionated, dan minimalis. Ini memberikan wawasan penting pada area seperti validasi input pengguna dan praktik keamanan
- Disediakan panduan detail untuk migrasi ke Express v5 serta threat model yang komprehensif, membantu pengembang menggunakan Express secara aman dan stabil
- Para maintainer baru proyek Express menargetkan pengembangan ekosistem Express menjadi alat yang stabil dan andal. Untuk itu, mereka akan bekerja sama dengan komunitas untuk menyelesaikan masalah dan melakukan perbaikan
4 komentar
Ah, akhirnya sudah mendukung promise. Kami masih cukup sering memakai Express, haha; ini kabar baik.
Sebagian besar sudah beralih ke nestjs, jadi hampir tidak ada lagi kesempatan untuk memakainya secara langsung. Kurang lebih sama seperti memakai servlet secara langsung.
Akhirnya sudah bisa menangani promise error, tapi saya sendiri tidak begitu paham alasan kenapa sekarang masih perlu memakainya.
Komentar Hacker News
Ingin menyampaikan terima kasih kepada Wes dan tim. Saya harus membaca dua kali bahwa sudah 10 tahun sejak PR v5 dibuka. Pasti dibutuhkan upaya yang luar biasa besar untuk mengubah inersia proyek ini. Selamat atas babak barunya
Selamat kepada tim Express. Ada banyak framework web server Node JS lainnya, tetapi saya tidak pindah ke yang lain karena Express menyediakan semua yang saya butuhkan. Semoga tetap seperti ini
Disebutkan bahwa Express masih belum menjadi
latestTerima kasih atas kerja Wes dan tim. Express masih menjadi pilihan yang paling disukai di nodejs, dan menyenangkan melihat pengelolaannya tetap aktif
Penasaran mengapa rilis v5 memakan waktu sampai 10 tahun
Menyebut perl 6
Gagasan untuk menyertakan respons sebagai bagian dari input path terasa seperti sesuatu dari era 2010-an. Sekarang kebanyakan hal memiliki path yang menerima request dan mengembalikan response. Ini lebih cocok dengan HTTP
Belum pernah melihat model "memindahkan yang lama ke perusahaan swasta lalu menyediakan dukungan"
Penasaran bagaimana perbandingan Express dengan koa, fastify, dan lainnya