HTTP क्लाइंट JavaScript में: Node.js में सही तरीके से अनुरोध करना
आधुनिक वेब डेवलपमेंट रिमोट सर्वर के साथ इंटरैक्शन के बिना अधूरा है। चाहे वह REST API से डेटा प्राप्त करना हो, फॉर्म सबमिट करना हो या फाइल अपलोड करना हो — HTTP अनुरोध किसी भी इंटीग्रेशन की नींव हैं। यदि आप Node.js पर डेवलप कर रहे हैं, तो आपके पास HTTP क्लाइंट बनाने के लिए कई शक्तिशाली टूल हैं। इस आर्टिकल में हम सीखेंगे कि अनुरोध सही तरीके से कैसे करें: बिल्ट-इन मॉड्यूल से लेकर लोकप्रिय लाइब्रेरी तक, एरर हैंडलिंग, टाइमआउट और कोड रीडेबिलिटी पर विशेष जोर देते हुए।
हम तीन मुख्य दृष्टिकोणों पर विचार करेंगे: बिल्ट-इन मॉड्यूल http/https, आधुनिक fetch (Node.js 18+ में उपलब्ध) और प्रसिद्ध लाइब्रेरी axios। प्रत्येक दृष्टिकोण के लिए आपको व्यावहारिक उदाहरण और सुझाव मिलेंगे।
1. बिल्ट-इन मॉड्यूल http/https: क्लासिक तरीका
Node.js में शुरू से ही नेटवर्क अनुरोधों के लिए http और https मॉड्यूल शामिल हैं। यह सबसे लो-लेवल तरीका है जो प्रक्रिया पर पूर्ण नियंत्रण देता है। हालांकि, रिस्पॉन्स को हैंडल करने के लिए इसमें अधिक कोड की आवश्यकता होती है।
https मॉड्यूल का उपयोग करके GET अनुरोध का उदाहरण:
const https = require('https');
function getUsers() { return new Promise((resolve, reject) => { const options = { hostname: 'jsonplaceholder.typicode.com', path: '/users', method: 'GET', headers: { 'Content-Type': 'application/json' } };
const req = https.request(options, (res) => { let data = '';
// डेटा को भागों में इकट्ठा करना res.on('data', (chunk) => { data += chunk; });
// जब रिस्पॉन्स पूरी तरह प्राप्त हो जाए res.on('end', () => { if (res.statusCode >= 200 && res.statusCode < 300) { resolve(JSON.parse(data)); } else { reject(new Error(`HTTP Error: ${res.statusCode}`)); } }); });
// नेटवर्क एरर को हैंडल करना req.on('error', (err) => { reject(err); });
// हैंग होने की स्थिति में टाइमआउट req.setTimeout(5000, () => { req.destroy(); reject(new Error('Request timeout')); });
req.end(); });}
// उपयोगgetUsers() .then(users => console.log('Users:', users.length)) .catch(err => console.error('Error:', err.message));लाभ:
- अतिरिक्त पैकेज इंस्टॉल करने की आवश्यकता नहीं है।
- कनेक्शन के प्रत्येक चरण पर पूर्ण नियंत्रण।
नुकसान:
- बहुत अधिक बॉयलरप्लेट कोड।
- चंक्स को मैन्युअल रूप से हैंडल करना और रिस्पॉन्स बॉडी को जोड़ना।
- रैपर के बिना प्रॉमिस के साथ काम करना असुविधाजनक।
यह दृष्टिकोण तब उचित है जब आप नेटवर्क के लिए लाइब्रेरी लिख रहे हों या आपको बिना अतिरिक्त डिपेंडेंसी के अधिकतम परफॉर्मेंस चाहिए। अन्य मामलों में, हाई-लेवल समाधान का उपयोग करना बेहतर है।
2. Fetch API: आधुनिक मानक
Node.js 18 से शुरू करके, fetch एक बिल्ट-इन फंक्शन बन गया है, जो इसे HTTP अनुरोधों के लिए मुख्य टूल बनाता है। यह प्रॉमिस पर आधारित है और इसमें साफ, सहज सिंटैक्स है।
fetch के साथ POST अनुरोध का उदाहरण:
async function createPost() { const url = 'https://jsonplaceholder.typicode.com/posts'; const newPost = { title: 'HTTP क्लाइंट JavaScript में', body: 'अनुरोध सही तरीके से करना', userId: 1 };
try { const response = await fetch(url, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(newPost) });
// रिस्पॉन्स स्टेटस की जांच if (!response.ok) { throw new Error(`HTTP error! status: ${response.status}`); }
const data = await response.json(); console.log('Created post ID:', data.id); return data; } catch (error) {