7 poin oleh GN⁺ 2024-10-20 | 4 komentar | Bagikan ke WhatsApp
  • 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-regexp diperbarui 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
  • Dukungan Promise

    • Dukungan ditambahkan untuk Promise yang ditolak akibat error yang terjadi di middleware
    • Ini tidak mencakup pemanggilan next dari 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.body tidak lagi selalu diinisialisasi sebagai {}
    • Nilai default extended pada parser urlencoded diubah menjadi false
    • Dukungan kompresi data lossless Brotli ditambahkan
  • Penghapusan method signature yang sudah deprecated

    • res.redirect('back') dan res.location('back'): tidak lagi mendukung magic string 'back'. Sebagai gantinya, gunakan req.get('Referrer') || '/' secara eksplisit
    • Signature res.send(status, body) dan res.send(body, status): gunakan res.status(status).send(body)
    • Signature res.send(status): untuk respons status sederhana gunakan res.sendStatus(status), dan untuk mengirim status code dengan body opsional gunakan res.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

 
aer0700 2024-10-22

Ah, akhirnya sudah mendukung promise. Kami masih cukup sering memakai Express, haha; ini kabar baik.

 
vipeen 2024-10-21

Sebagian besar sudah beralih ke nestjs, jadi hampir tidak ada lagi kesempatan untuk memakainya secara langsung. Kurang lebih sama seperti memakai servlet secara langsung.

 
chotnt741 2024-10-20

Akhirnya sudah bisa menangani promise error, tapi saya sendiri tidak begitu paham alasan kenapa sekarang masih perlu memakainya.

 
GN⁺ 2024-10-20
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

    • Saat menggunakan regular expression, ada kasus di mana parsing input menunjukkan perilaku waktu eksponensial. Ini bisa dengan mudah dihindari dengan beralih ke mesin regular expression yang sesungguhnya seperti re2
    • Bisa merujuk ke tulisan rsc berjudul "Regular Expression Matching Can Be Simple And Fast"
  • 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 latest

  • Terima 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