7 पॉइंट द्वारा GN⁺ 2024-10-20 | 4 टिप्पणियां | WhatsApp पर शेयर करें
  • 10 साल पहले पहला v5 PR दर्ज किया गया था, और आखिरकार अब इसे merge और publish कर दिया गया है
  • यह जानबूझकर सरल रखा गया रिलीज़ है, ताकि आने वाली रिलीज़ों में अधिक प्रभावशाली बदलाव लागू किए जा सकें
  • इसका एक उद्देश्य Node.js ecosystem को यह बताना भी है कि Express फिर से सक्रिय हो गया है

प्रमुख बदलाव

  • Node.js version support में बदलाव

    • Node.js 0.10 का support समाप्त, अब Node 18 और उससे ऊपर के version supported हैं
    • पुराने Node.js versions के support के कारण performance और maintenance से जुड़े महत्वपूर्ण बदलावों में जो देरी हो रही थी, उसका समाधान किया गया
    • नए language और runtime features अपनाना, और अब आवश्यक न रहने वाली dependencies हटाना संभव हुआ
    • पुराने Node.js versions का उपयोग करने वाली कंपनियों की कठिनाइयों को ध्यान में रखते हुए HeroDevs के साथ साझेदारी कर v4 support समाप्त होने के बाद भी महत्वपूर्ण security patches देने के लिए "अनिश्चितकालीन समर्थन" प्रदान किया जाएगा
  • Path matching और regular expression में बदलाव

    • path-to-regexp लाइब्रेरी को 0.x से 8.x तक अपडेट किया गया है, जिससे कई वर्षों के बदलाव एक साथ शामिल हुए हैं
    • regular expression subexpressions (उदाहरण: /:foo(\\d+)) का support समाप्त किया गया
      • ReDoS हमलों को रोकने के लिए इसे हटाया गया
      • migration तरीका: मज़बूत input validation लाइब्रेरी का उपयोग करने की सिफारिश
    • सामान्य path patterns के लिए सरल किए गए pattern शामिल किए गए हैं
      • :name? को {:name} में बदला गया है
      • * को *name में बदला गया है
      • (, ), [, ], ?, +, ! को reserved characters के रूप में जोड़ा गया है
    • क्रमबद्ध numeric parameters का support समाप्त किया गया है। अब सभी parameters के नाम होने चाहिए
  • Promise support

    • middleware में हुई errors के कारण reject हुए Promise के लिए support जोड़ा गया है
    • resolved Promise में next को call करना इसमें शामिल नहीं है
    • अब अधिकांश मामलों में middleware इस तरह लिखा जा सकता है:
      app.use(async (req, res, next) => {  
        req.locals.user = await getUser(req);  
        next();  
      });  
      
  • Body parser में बदलाव

    • CVE-2024-45590 mitigation के लिए urlencoded body depth को customize करने का option जोड़ा गया है (default 32)
    • अब deprecated bodyParser() combined middleware हटा दिया गया है
    • req.body अब हमेशा {} से initialize नहीं होगा
    • urlencoded parser में extended का default अब false है
    • Brotli lossless data compression support जोड़ा गया है
  • Deprecated method signatures हटाए गए

    • res.redirect('back') और res.location('back'): अब 'back' magic string supported नहीं है। इसकी जगह req.get('Referrer') || '/' को स्पष्ट रूप से उपयोग करें
    • res.send(status, body) और res.send(body, status) signatures: res.status(status).send(body) का उपयोग करें
    • res.send(status) signature: साधारण status response के लिए res.sendStatus(status) का उपयोग करें, और optional body के साथ status code भेजने के लिए res.status(status).send() का उपयोग करें
    • अन्य deprecated method signatures भी हटाए गए हैं (विस्तार के लिए migration guide देखें)
  • Migration और security guidance

    • v4 से v5 में migration करने वाले developers के लिए विस्तृत migration guide दी गई है
    • Express का सुरक्षित और भरोसेमंद उपयोग करने के लिए user input validation और security practices जैसे क्षेत्रों पर महत्वपूर्ण insights देने वाला व्यापक threat model प्रदान किया गया है

GN⁺ की राय

  • Express v5 ऐसा रिलीज़ है जिसका मुख्य फ़ोकस Node.js ecosystem को यह बताना है कि Express फिर से सक्रिय है। इसमें पुराने Node.js versions का support समाप्त करने, security issues हल करने और maintenance को सरल बनाने पर ज़ोर है
  • इस रिलीज़ को जानबूझकर सरल रखा गया है ताकि ecosystem की रुकावटें हटाई जा सकें और भविष्य की रिलीज़ों में अधिक प्रभाव डालने वाले बदलाव संभव हो सकें
  • Express की philosophy यह है कि यह Node.js के लिए तेज़, non-opinionated और minimal web framework है। यह user input validation और security practices जैसे क्षेत्रों में महत्वपूर्ण insights प्रदान करता है
  • Express v5 migration के लिए विस्तृत guide और व्यापक threat model उपलब्ध कराया गया है, जिससे developers Express का सुरक्षित और स्थिर उपयोग कर सकें
  • Express project के नए maintainers का लक्ष्य Express ecosystem को एक स्थिर और भरोसेमंद tool के रूप में आगे बढ़ाना है। इसके लिए वे community के साथ मिलकर समस्याओं को हल करेंगे और सुधार जारी रखेंगे

4 टिप्पणियां

 
aer0700 2024-10-22

आह, आख़िरकार promise का support आ गया। हम अभी भी express काफ़ी इस्तेमाल करते हैं हाहा; यह अच्छी ख़बर है।

 
vipeen 2024-10-21

ज़्यादातर लोग nestjs पर जा चुके हैं, इसलिए इसे सीधे इस्तेमाल करने की ज़रूरत अब बहुत कम रह गई है। यह लगभग servlet को सीधे इस्तेमाल करने जैसा ही है।

 
chotnt741 2024-10-20

आख़िरकार अब promise error को हैंडल किया जा सकता है, लेकिन अब इस समय इसे ज़रूर इस्तेमाल करने की कोई खास वजह है, ऐसा मुझे नहीं लगता।

 
GN⁺ 2024-10-20
Hacker News राय
  • Wes और टीम के प्रति आभार व्यक्त करना चाहता हूँ। v5 PR खुले हुए 10 साल हो गए, यह समझने के लिए मुझे इसे दो बार पढ़ना पड़ा। इस प्रोजेक्ट की जड़ता को बदलने में बहुत बड़ा प्रयास लगा होगा। नए अध्याय के लिए बधाई

    • regular expression का उपयोग करते समय इनपुट को पार्स करने में exponental time behavior दिखने के मामले हो सकते हैं। इससे re2 जैसे वास्तविक regular expression engine पर स्विच करके आसानी से बचा जा सकता है
    • rsc का लेख "Regular Expression Matching Can Be Simple And Fast" देखा जा सकता है
  • Express टीम को बधाई। दूसरे Node JS web server framework बहुत हैं, लेकिन Express मेरी ज़रूरत की हर चीज़ देता है, इसलिए मैंने किसी और पर स्विच नहीं किया। उम्मीद है यह ऐसे ही बना रहेगा

  • यह बताया गया कि Express अभी भी latest नहीं है

  • Wes और टीम के काम के लिए धन्यवाद। Express अब भी nodejs में सबसे पसंदीदा विकल्प है, और इसका सक्रिय maintenance देखना अच्छा लगता है

  • यह जिज्ञासा कि v5 रिलीज़ होने में 10 साल क्यों लगे

  • perl 6 का उल्लेख

  • path के input के हिस्से के रूप में response शामिल करने का विचार 2010 के दशक की चीज़ जैसा लगता है। आजकल ज़्यादातर चीज़ों में ऐसे path होते हैं जो request लेते हैं और response लौटाते हैं। यह HTTP के साथ बेहतर मेल खाता है

  • "पुरानी चीज़ को किसी private company को ट्रांसफर करके support देना" वाला मॉडल पहले कभी नहीं देखा था

  • यह जिज्ञासा कि Express की koa, fastify आदि से तुलना कैसे होती है