$lang['tuto'] = "ट्यूटोरियल"; ?> ReactJS: क्रोम CORS प्लगइन

ReactJS: क्रोम CORS प्लगइन जोड़ने के बाद, अनहैंडल रिजेक्शन (टाइप एरर) लाने में विफल रहा

Temp mail SuperHeros
ReactJS: क्रोम CORS प्लगइन जोड़ने के बाद, अनहैंडल रिजेक्शन (टाइप एरर) लाने में विफल रहा
ReactJS: क्रोम CORS प्लगइन जोड़ने के बाद, अनहैंडल रिजेक्शन (टाइप एरर) लाने में विफल रहा

प्रतिक्रिया में एपीआई त्रुटियों को संभालना: सीओआरएस प्लगइन चुनौतियां

एपीआई के साथ काम करते समय रिएक्टजेएस, डेवलपर्स को अक्सर डेटा प्राप्त करने से संबंधित विभिन्न चुनौतियों का सामना करना पड़ता है, खासकर तीसरे पक्ष के एपीआई के साथ काम करते समय। एक आम समस्या जो उठती है वह है "अनहैंडल रिजेक्शन (टाइप एरर): फेल टू फ़ेच" त्रुटि। यह त्रुटि स्विगी के रेस्तरां सूची एपीआई जैसे लोकप्रिय एपीआई का उपयोग करते समय भी हो सकती है, जिसका उपयोग कई डेवलपर्स अपने वेब अनुप्रयोगों को बढ़ाने के लिए करते हैं।

इस मामले में, प्रतिबंधात्मक ब्राउज़र नीतियों को बायपास करने के लिए CORS क्रोम एक्सटेंशन जोड़ना एक व्यवहार्य समाधान की तरह लग सकता है। हालाँकि, इससे समस्या का समाधान होने के बजाय नई जटिलताएँ उत्पन्न हो सकती हैं। यदि आप अपने विकास परिवेश में सीओआरएस प्लगइन का उपयोग कर रहे हैं, और आपके एपीआई अनुरोध लोड होने के तुरंत बाद विफल हो जाते हैं, तो आप एक समस्या में भाग ले सकते हैं जहां प्लगइन ब्राउज़र के अनुरोध-हैंडलिंग व्यवहार के साथ टकराव करता है।

क्रॉस-ऑरिजिन अनुरोधों को प्रबंधित करने और समस्या निवारण का तरीका समझना सीओआरएस त्रुटियाँ ReactJS में सुचारू विकास प्रक्रिया के लिए आवश्यक है। स्विगी जैसे एपीआई में अक्सर अनधिकृत ग्राहकों की पहुंच को नियंत्रित करने के लिए CORS जैसी सुरक्षा परतें होती हैं। इन प्रतिबंधों से त्रुटियाँ हो सकती हैं जिनका समुचित समाधान करने की आवश्यकता है।

इस गाइड में, हम पता लगाएंगे कि यह त्रुटि क्यों होती है, खासकर क्रोम में सीओआरएस प्लगइन जोड़ने के बाद। हम आपके स्विगी एपीआई के साथ काम करते समय इसे हल करने की रणनीतियों पर भी चर्चा करेंगे प्रतिक्रिया अनुप्रयोग.

आज्ञा उपयोग का उदाहरण
fetch() इस कमांड का उपयोग स्विगी एपीआई के लिए HTTP अनुरोध करने के लिए किया जाता है। यह संसाधनों को अतुल्यकालिक रूप से लाता है और एक वादा लौटाता है, जो एक रिस्पांस ऑब्जेक्ट का समाधान करता है। यह एपीआई से रेस्तरां डेटा पुनर्प्राप्त करने की कुंजी है।
useEffect() रिएक्ट में प्रयुक्त, यह हुक घटक को प्रस्तुत करने के बाद एपीआई कॉल जैसे साइड इफेक्ट्स के निष्पादन की अनुमति देता है। यह सुनिश्चित करता है कि घटक माउंट होने के बाद स्विगी के एपीआई के लिए फ़ेच अनुरोध किया जाता है।
res.setHeader() यह एक्सप्रेस कमांड कस्टम HTTP हेडर सेट करता है, जैसे पहुंच-नियंत्रण-अनुमति-उत्पत्ति, जो सीओआरएस प्रबंधन में महत्वपूर्ण है। यह बैकएंड को CORS त्रुटियों को रोकते हुए, किसी भी मूल से अनुरोधों की अनुमति देने में सक्षम बनाता है।
res.json() इस पद्धति का उपयोग क्लाइंट को JSON प्रतिक्रिया वापस भेजने के लिए किया जाता है। प्रॉक्सी सर्वर समाधान में, यह सुनिश्चित करता है कि स्विगी से प्राप्त एपीआई डेटा JSON प्रारूप के रूप में लौटाया जाए, जिसे फ्रंट एंड आसानी से उपभोग कर सके।
await यह कीवर्ड एसिंक्रोनस फ़ंक्शन के निष्पादन को रोक देता है जब तक कि फ़ेच ऑपरेशन हल नहीं हो जाता, यह सुनिश्चित करता है कि कोड आगे बढ़ने से पहले एपीआई के डेटा की प्रतीक्षा करता है, जिससे अनचाहे अस्वीकृति को रोका जा सके।
express() अभिव्यक्त करना() फ़ंक्शन का उपयोग एक्सप्रेस सर्वर का एक उदाहरण बनाने के लिए किया जाता है। यह सर्वर डेटा लाने के दौरान CORS समस्याओं को रोकने के लिए फ्रंटएंड और स्विगी एपीआई के बीच प्रॉक्सी के रूप में कार्य करता है।
app.listen() यह कमांड एक्सप्रेस सर्वर को एक निर्दिष्ट पोर्ट (उदाहरण के लिए, इस मामले में पोर्ट 5000) पर आने वाले अनुरोधों को सुनना शुरू कर देता है। विकास के दौरान प्रॉक्सी सर्वर को स्थानीय रूप से होस्ट करने के लिए यह महत्वपूर्ण है।
try...catch यह ब्लॉक उन त्रुटियों को संभालता है जो फ़ेच अनुरोध के दौरान हो सकती हैं, जैसे नेटवर्क विफलताएं या स्विगी एपीआई के साथ समस्याएं। यह सुनिश्चित करता है कि ऐप क्रैश होने के बजाय त्रुटियों को शालीनता से संभाल ले।

स्विगी एपीआई के साथ रिएक्ट में सीओआरएस मुद्दों के समाधान की व्याख्या करना

पहले समाधान में, हमने एक बनाया नोड.जे.एस स्विगी के एपीआई से रेस्तरां डेटा प्राप्त करते समय सीओआरएस मुद्दे को बायपास करने के लिए एक्सप्रेस का उपयोग करके बैकएंड। CORS नीति ब्राउज़र को किसी भिन्न डोमेन पर अनुरोध करने से रोकती है जब तक कि वह डोमेन इसकी अनुमति न दे। एक साधारण सर्वर बनाकर, हम क्लाइंट और एपीआई के बीच एक मध्य परत के रूप में कार्य कर सकते हैं, डेटा सर्वर-साइड ला सकते हैं और इसे रिएक्ट फ्रंट-एंड पर लौटा सकते हैं। यह विधि सीओआरएस त्रुटियों से बचती है क्योंकि अनुरोध क्लाइंट ऐप के समान मूल से आता है।

एक्सप्रेस बैकएंड विशेष रूप से कस्टम हेडर सेट करता है पहुंच-नियंत्रण-अनुमति-उत्पत्ति, जो हमारे ग्राहक को सीओआरएस प्रतिबंधों का सामना किए बिना संसाधनों का अनुरोध करने की अनुमति देता है। स्विगी के एपीआई के लिए फ़ेच कॉल को सर्वर-साइड बनाया गया है, और डेटा JSON प्रारूप में लौटाया गया है। इस दृष्टिकोण को अक्सर उत्पादन परिवेश में अधिक सुरक्षित और निष्पादन योग्य माना जाता है क्योंकि यह एपीआई कुंजी या संवेदनशील जानकारी छुपाता है। इसके अलावा, ट्राई-कैच का उपयोग उचित त्रुटि प्रबंधन सुनिश्चित करता है, यदि एपीआई प्रतिक्रिया देने में विफल रहता है तो उपयोगकर्ता के अनुकूल त्रुटि संदेश प्रदर्शित करता है।

दूसरे समाधान में, हम क्लाइंट-साइड रिएक्ट कोड पर फ़ेच अनुरोध को संशोधित करते हैं। इस विधि में फ़ेच कॉल में कस्टम हेडर जोड़ना शामिल है, जिससे यह सुनिश्चित होता है कि एपीआई तक पहुंचने से पहले अनुरोध सही ढंग से प्रारूपित किया गया है। हम रिएक्ट का उपयोग करते हैं उपयोगप्रभाव घटक माउंट होने पर एपीआई कॉल को ट्रिगर करने के लिए हुक। एसिंक फ़ंक्शन एपीआई प्रतिक्रिया की प्रतीक्षा करता है, इसे JSON में परिवर्तित करता है, और अनुरोध विफल होने पर त्रुटियों को संभालता है। हालाँकि, यदि एपीआई सीधे ब्राउज़र से क्रॉस-ऑरिजिन अनुरोधों की अनुमति नहीं देता है, तो यह समाधान अभी भी CORS समस्याओं का सामना करता है।

अंत में, तीसरे समाधान में, हम CORS-Anywhere नामक तृतीय-पक्ष सेवा का उपयोग करते हैं। यह एक मिडलवेयर सेवा है जो अस्थायी रूप से अपने सर्वर के माध्यम से एपीआई अनुरोध को पुन: रूट करके सीओआरएस प्रतिबंधों को बायपास करने में मदद करती है। हालाँकि यह समाधान विकास परिवेश में काम कर सकता है, लेकिन सुरक्षा जोखिमों और बाहरी सेवाओं पर निर्भरता के कारण इसे उत्पादन के लिए अनुशंसित नहीं किया जाता है। यह प्रदर्शन ओवरहेड का भी परिचय देता है क्योंकि यह डेटा लाने की प्रक्रिया में एक अतिरिक्त परत जोड़ता है। परीक्षण चरणों के दौरान इस पद्धति का उपयोग सुविधाजनक हो सकता है लेकिन सुरक्षा कारणों से उत्पादन में इससे बचना चाहिए।

समाधान 1: प्रॉक्सी सर्वर के साथ सीओआरएस मुद्दों को संभालना

यह समाधान CORS त्रुटियों से बचने और स्विगी एपीआई से डेटा को सही ढंग से लाने के लिए Node.js बैकएंड प्रॉक्सी सर्वर का उपयोग करता है।

const express = require('express');
const fetch = require('node-fetch');
const app = express();
const port = 5000;

app.use((req, res, next) => {
  res.setHeader('Access-Control-Allow-Origin', '*');
  res.setHeader('Access-Control-Allow-Methods', 'GET');
  next();
});

app.get('/restaurants', async (req, res) => {
  try {
    const response = await fetch('https://www.swiggy.com/dapi/restaurants/list/v5?lat=23.1685786&lng=79.9338798');
    const data = await response.json();
    res.json(data);
  } catch (err) {
    res.status(500).json({ error: 'Failed to fetch restaurants' });
  }
});

app.listen(port, () => {
  console.log(`Server running on http://localhost:${port}`);
});

समाधान 2: कस्टम हेडर और त्रुटि प्रबंधन के साथ फ्रंट-एंड फ़ेच का उपयोग करना

यह दृष्टिकोण सीधे रिएक्ट में फ़ेच अनुरोध को संशोधित करता है, कस्टम हेडर जोड़ता है और त्रुटियों को प्रभावी ढंग से संभालता है।

import React, { useEffect } from 'react';

const Body = () => {
  async function getRestaurants() {
    try {
      const response = await fetch(
        'https://www.swiggy.com/dapi/restaurants/list/v5?lat=23.1685786&lng=79.9338798',
        { headers: { 'Content-Type': 'application/json' } }
      );

      if (!response.ok) {
        throw new Error('Network response was not ok');
      }

      const data = await response.json();
      console.log(data);
    } catch (error) {
      console.error('Fetch error:', error);
    }
  }

  useEffect(() => {
    getRestaurants();
  }, []);
};

export default Body;

समाधान 3: विकास के लिए CORS-एनीव्हेयर मिडलवेयर का उपयोग करना

यह विधि विकास मोड में रहते हुए CORS प्रतिबंधों को बायपास करने के लिए "CORS-Anywhere" सेवा का उपयोग करती है। इस घोल का उपयोग उत्पादन में नहीं किया जाना चाहिए.

const Body = () => {
  async function getRestaurants() {
    try {
      const response = await fetch(
        'https://cors-anywhere.herokuapp.com/https://www.swiggy.com/dapi/restaurants/list/v5?lat=23.1685786&lng=79.9338798'
      );

      const data = await response.json();
      console.log(data);
    } catch (error) {
      console.error('Error fetching restaurants:', error);
    }
  }

  useEffect(() => {
    getRestaurants();
  }, []);
};

export default Body;

एपीआई अनुरोधों में सीओआरएस समस्याओं का निवारण

रिएक्ट एप्लिकेशन में "फ़ेच करने में विफल" त्रुटि के अंतर्निहित कारणों में से एक, विशेष रूप से स्विगी जैसे तृतीय-पक्ष एपीआई का उपयोग करते समय, है CORS (क्रॉस-ओरिजिनल रिसोर्स शेयरिंग) प्रतिबंध। सीओआरएस एक सुरक्षा सुविधा है जो वेब एप्लिकेशन को उस डोमेन से भिन्न डोमेन पर अनुरोध करने से रोकती है जहां से उन्हें सेवा दी गई थी। इस मामले में, स्विगी एपीआई अनुरोध को अस्वीकार कर देता है क्योंकि यह एक अलग डोमेन (आपका रिएक्ट ऐप) से उत्पन्न होता है। यह विशेष रूप से समस्याग्रस्त है जब आप एपीआई से डेटा प्राप्त कर रहे हैं जो स्पष्ट रूप से क्रॉस-ऑरिजिन अनुरोधों का समर्थन नहीं करते हैं।

एक सामान्य समाधान "अनुमति CORS" क्रोम एक्सटेंशन जैसे ब्राउज़र एक्सटेंशन का उपयोग करना है। हालाँकि, ऐसे एक्सटेंशन से असंगत परिणाम हो सकते हैं। ऐसा इसलिए है क्योंकि वे ब्राउज़र-स्तरीय सेटिंग्स में हेरफेर करते हैं जो हमेशा एपीआई अनुरोधों के साथ ठीक से सिंक्रनाइज़ नहीं होते हैं। इन प्लगइन्स का उपयोग आदर्श रूप से केवल विकास के लिए किया जाना चाहिए, न कि उत्पादन वातावरण में। उत्पादन के लिए, एक सुरक्षित और अधिक विश्वसनीय तरीका बैकएंड प्रॉक्सी सर्वर का उपयोग करना होगा जो आपके रिएक्ट ऐप की ओर से डेटा का अनुरोध करता है, जैसा कि पहले दिए गए समाधानों में देखा गया है।

विचार करने योग्य एक अन्य पहलू त्रुटियों को प्रभावी ढंग से संभालना है। जबकि सीओआरएस मुद्दे "फ़ेच करने में विफल" त्रुटियों का एक सामान्य कारण हैं, नेटवर्क अस्थिरता, गलत एपीआई यूआरएल, या सर्वर डाउनटाइम जैसे अन्य कारक भी इस त्रुटि का परिणाम हो सकते हैं। इसलिए, इसे लागू करना महत्वपूर्ण है मजबूत त्रुटि प्रबंधन आपके कोड में, विशेष रूप से तृतीय-पक्ष API के साथ काम करते समय। एक उचित त्रुटि-हैंडलिंग तंत्र समस्या को अधिक प्रभावी ढंग से डीबग करने में मदद करेगा और कुछ गलत होने पर उपयोगकर्ता के अनुकूल संदेश प्रदान करेगा।

रिएक्ट में CORS और API अनुरोधों के बारे में सामान्य प्रश्न

  1. CORS क्या है और यह महत्वपूर्ण क्यों है?
  2. सीओआरएस (क्रॉस-ऑरिजिन रिसोर्स शेयरिंग) अविश्वसनीय डोमेन से दुर्भावनापूर्ण अनुरोधों को रोकने के लिए ब्राउज़र द्वारा लागू की गई एक सुरक्षा नीति है। यह सुनिश्चित करता है कि केवल कुछ डोमेन को ही सर्वर से संसाधन लाने की अनुमति है।
  3. मुझे "अनहैंडल रिजेक्शन (टाइप एरर): फ़ेच करने में विफल" क्यों मिल रहा है?
  4. यह त्रुटि आम तौर पर तब होती है जब आपका एपीआई अनुरोध सीओआरएस प्रतिबंधों के कारण अवरुद्ध हो जाता है। यह गलत एपीआई यूआरएल या सर्वर से जुड़ी समस्याओं के कारण भी हो सकता है।
  5. क्या करता है useEffect इस संदर्भ में हुक क्या करें?
  6. useEffect रिएक्ट में हुक का उपयोग घटक माउंट होने के बाद एपीआई अनुरोध को ट्रिगर करने के लिए किया जाता है। यह सुनिश्चित करता है कि फ़ेच ऑपरेशन सही समय पर हो, जिससे कई अनावश्यक अनुरोधों को रोका जा सके।
  7. मैं रिएक्ट एप्लिकेशन में CORS त्रुटियों को कैसे ठीक कर सकता हूं?
  8. CORS त्रुटियों को ठीक करने के लिए, आप बैकएंड प्रॉक्सी का उपयोग कर सकते हैं, उचित हेडर सेट कर सकते हैं res.setHeader सर्वर में, या विकास उद्देश्यों के लिए CORS-Anywhere जैसी सेवाओं पर निर्भर रहें।
  9. क्या मैं उत्पादन में CORS ब्राउज़र एक्सटेंशन का उपयोग कर सकता हूँ?
  10. नहीं, CORS ब्राउज़र एक्सटेंशन का उपयोग केवल विकास के लिए किया जाना चाहिए। उत्पादन में, सर्वर पर CORS को कॉन्फ़िगर करना या प्रॉक्सी सर्वर का उपयोग करना अधिक सुरक्षित है।

प्रतिक्रिया में CORS त्रुटियों के प्रबंधन पर अंतिम विचार

तृतीय-पक्ष एपीआई का उपभोग करने वाले रिएक्ट एप्लिकेशन विकसित करते समय सीओआरएस त्रुटियां एक आम चुनौती हैं। यद्यपि ब्राउज़र एक्सटेंशन विकास में मदद कर सकते हैं, सुरक्षा और डेटा अखंडता बनाए रखने के लिए उत्पादन वातावरण में प्रॉक्सी सर्वर जैसे अधिक विश्वसनीय समाधान लागू करना महत्वपूर्ण है।

त्रुटि प्रबंधन और बैकएंड समाधान जैसी सही तकनीकों का उपयोग करके, डेवलपर्स "फ़ेच करने में विफल" जैसे मुद्दों को कुशलतापूर्वक संभाल सकते हैं। यह सुनिश्चित करता है कि उनका एप्लिकेशन एपीआई के साथ इंटरैक्ट करते समय प्रदर्शन और कार्यक्षमता को बढ़ाते हुए एक सहज उपयोगकर्ता अनुभव प्रदान करता है।

प्रतिक्रिया में सीओआरएस मुद्दों को समझने के लिए संदर्भ और स्रोत सामग्री
  1. क्रॉस-ओरिजिनल रिसोर्स शेयरिंग (सीओआरएस) पर विस्तृत जानकारी और इसे रिएक्ट में कैसे प्रबंधित करें, इसके लिए देखें सीओआरएस पर एमडीएन वेब डॉक्स .
  2. सामान्य रिएक्ट त्रुटियों जैसे "फ़ेच करने में विफल" और संभावित समाधानों के बारे में अधिक समझने के लिए, जांचें त्रुटि सीमाओं पर प्रतिक्रिया दस्तावेज़ीकरण .
  3. यदि आप CORS समस्याओं को बायपास करने के लिए प्रॉक्सी सर्वर स्थापित करने के लिए एक्सप्रेस के साथ काम कर रहे हैं, तो जाएँ एक्सप्रेस.जेएस रूटिंग और मिडलवेयर .
  4. जावास्क्रिप्ट में फ़ेच एपीआई के साथ कैसे काम करें, इस पर सहायता के लिए देखें फ़ेच एपीआई पर एमडीएन वेब डॉक्स .
  5. जानें कि आधिकारिक एपीआई दस्तावेज़ में रेस्तरां डेटा के लिए स्विगी के एपीआई का उपयोग कैसे करें: स्विगी एपीआई .