Kodokon kodokon.com

आपका पहला नेटिव HTTP सर्वर

आप Node के http मॉड्यूल से एक वेब सर्वर बनाते हैं, अनुरोधों का उत्तर देते हैं, और JSON लौटाते हैं।

10 मिनट · 3 प्रश्न

इस पाठ को Kodokon में खोलें

एक वेब सर्वर एक ऐसा प्रोग्राम है जो लगातार चलता रहता है और अनुरोधों की प्रतीक्षा करता है: किसी क्लाइंट (एक ब्राउज़र, एक मोबाइल ऐप, वगैरह) द्वारा भेजी गई माँगें। हर अनुरोध के लिए, यह एक प्रतिक्रिया लौटाता है। यह संवाद HTTP प्रोटोकॉल का पालन करता है, वेब की साझा भाषा। Node एक उपयोग के लिए तैयार http मॉड्यूल शामिल करता है: कुछ भी इंस्टॉल करने की ज़रूरत नहीं। एक आख़िरी धारणा: पोर्ट, एक संख्या जो किसी मशीन पर एक विशिष्ट प्रोग्राम की पहचान करती है, जैसे किसी इमारत में अपार्टमेंट का नंबर। हम पोर्ट 3000 उपयोग करेंगे; जहाँ तक localhost की बात है, यह बस आपकी अपनी मशीन को दर्शाता है।

JAVASCRIPT
import http from "node:http";

const server = http.createServer((req, res) => {
  res.statusCode = 200;
  res.setHeader("Content-Type", "text/plain");
  res.end("Hello from my server!");
});

server.listen(3000, () => {
  console.log("Server at http://localhost:3000");
});
इस कोड को server.js में सहेजें फिर node server.js चलाएँ।

आइए इसे तोड़कर समझें। http.createServer एक ऐसा फ़ंक्शन प्राप्त करता है जिसे हर अनुरोध पर कॉल किया जाता है, दो पैरामीटर के साथ: req (आने वाला अनुरोध) और res (बनाई जा रही प्रतिक्रिया)। res.statusCode = 200 स्टेटस कोड सेट करता है - 200 का अर्थ है "सब ठीक है"। res.setHeader एक हेडर जोड़ता है, प्रतिक्रिया के बारे में मेटाडेटा का एक टुकड़ा: यहाँ इसका प्रारूप, सादा टेक्स्ट। res.end प्रतिक्रिया भेजता है और उसे बंद कर देता है। अंत में, server.listen(3000) सर्वर को पोर्ट 3000 पर सुनने के लिए लगा देता है। अपने ब्राउज़र में http://localhost:3000 खोलें: आपका टेक्स्ट दिखाई देता है। ध्यान दें कि प्रोग्राम नियंत्रण वापस नहीं देता: यह अनुरोधों की प्रतीक्षा करता है। इसे Ctrl+C से रोकें।

आधुनिक सर्वर शायद ही कभी सादा टेक्स्ट लौटाते हैं: वे API प्रकट करते हैं जो JSON में उत्तर देते हैं, वह टेक्स्ट प्रारूप जिसे आप पहले से जानते हैं, हर भाषा द्वारा समझा जाने वाला। दो समायोजन: Content-Type हेडर application/json बन जाता है, और JavaScript ऑब्जेक्ट को JSON.stringify से टेक्स्ट में बदल दिया जाता है। आइए इस मौके का फ़ायदा उठाकर req.url, यानी क्लाइंट द्वारा अनुरोधित पथ, के आधार पर अलग-अलग प्रतिक्रिया दें: यही रूटिंग का आधार है।

JAVASCRIPT
import http from "node:http";

const server = http.createServer((req, res) => {
  res.setHeader("Content-Type", "application/json");

  if (req.url === "/api/message") {
    const body = { message: "Hello!", ok: true };
    res.statusCode = 200;
    res.end(JSON.stringify(body));
    return;
  }

  res.statusCode = 404;
  res.end(JSON.stringify({ error: "Not found" }));
});

server.listen(3000, () => {
  console.log("http://localhost:3000/api/message");
});
एक ज्ञात रूट JSON ऑब्जेक्ट के साथ 200 का उत्तर देता है; कोई भी अन्य पथ एक 404 प्राप्त करता है।

404 स्टेटस कोड का अर्थ है "नहीं मिला": अनुरोधित पथ किसी ज्ञात रूट से मेल नहीं खाता। पहली प्रतिक्रिया के बाद return पर ध्यान दें: यह कोड को आगे बढ़ने और दूसरी प्रतिक्रिया भेजने से रोकता है, जो एक त्रुटि का कारण बनेगी। परीक्षण करने के लिए, ब्राउज़र में पता खोलें, या curl का उपयोग करें, एक कमांड-लाइन टूल जो HTTP अनुरोध भेजता है और टर्मिनल में प्रतिक्रिया दिखाता है।

BASH
curl http://localhost:3000/api/message
एक दूसरे टर्मिनल में, जबकि सर्वर चल रहा हो: JSON प्रतिक्रिया दिखाई देती है।

ज्ञान जांच

सुनिश्चित करें कि आपको इस पाठ के मुख्य बिंदु याद हैं।

  1. server.listen(3000) क्या करता है?
    • यह सर्वर को पोर्ट 3000 पर अनुरोधों के लिए सुनने पर लगा देता है
    • यह पोर्ट 3000 पर एक अनुरोध भेजता है
    • यह सर्वर को 3000 एक साथ के अनुरोधों तक सीमित करता है
    • यह localhost:3000 पर ब्राउज़र खोलता है
  2. यह इंगित करने के लिए कि प्रतिक्रिया JSON है, आप कौन सा हेडर भेजते हैं?
    • Accept: application/json
    • Content-Type: application/json
    • Format: json
  3. res.end से पहले ऑब्जेक्ट को JSON.stringify से क्यों गुज़ारें?
    • प्रतिक्रिया को संपीड़ित करने और समय बचाने के लिए
    • यह जाँचने के लिए कि ऑब्जेक्ट में कोई त्रुटि नहीं है
    • क्योंकि एक HTTP प्रतिक्रिया टेक्स्ट ले जाती है, न कि कोई JavaScript ऑब्जेक्ट