$lang['tuto'] = "টিউটোরিয়াল"; ?> ReactJS: Chrome CORS প্লাগইন যোগ

ReactJS: Chrome CORS প্লাগইন যোগ করার পরে, আনহ্যান্ডেল প্রত্যাখ্যান (TypeError) আনতে ব্যর্থ হয়েছে

Temp mail SuperHeros
ReactJS: Chrome CORS প্লাগইন যোগ করার পরে, আনহ্যান্ডেল প্রত্যাখ্যান (TypeError) আনতে ব্যর্থ হয়েছে
ReactJS: Chrome CORS প্লাগইন যোগ করার পরে, আনহ্যান্ডেল প্রত্যাখ্যান (TypeError) আনতে ব্যর্থ হয়েছে

প্রতিক্রিয়ায় API ত্রুটিগুলি পরিচালনা করা: CORS প্লাগইন চ্যালেঞ্জগুলি৷

এপিআই এর সাথে কাজ করার সময় ReactJS, ডেভেলপাররা প্রায়ই ডেটা আনার সাথে সম্পর্কিত বিভিন্ন চ্যালেঞ্জের সম্মুখীন হয়, বিশেষ করে যখন তৃতীয় পক্ষের API-এর সাথে কাজ করে। একটি সাধারণ সমস্যা যা দেখা দেয় তা হল "আনহ্যান্ডেলড প্রত্যাখ্যান (TypeError): আনয়ন করতে ব্যর্থ" ত্রুটি৷ Swiggy's restaurant list API এর মতো জনপ্রিয় API ব্যবহার করার সময়ও এই ত্রুটি ঘটতে পারে, যা অনেক ডেভেলপার তাদের ওয়েব অ্যাপ্লিকেশনগুলিকে উন্নত করতে ব্যবহার করে।

এই ক্ষেত্রে, একটি CORS Chrome এক্সটেনশন যোগ করা সীমাবদ্ধ ব্রাউজার নীতিগুলিকে বাইপাস করার জন্য একটি কার্যকর সমাধান বলে মনে হতে পারে। যাইহোক, এটি সমস্যা সমাধানের পরিবর্তে নতুন জটিলতা প্রবর্তন করতে পারে। আপনি যদি আপনার ডেভেলপমেন্ট এনভায়রনমেন্টে একটি CORS প্লাগইন ব্যবহার করেন, এবং আপনার API অনুরোধগুলি লোড হওয়ার কিছুক্ষণ পরেই ব্যর্থ হয়, তাহলে আপনি একটি সমস্যায় পড়তে পারেন যেখানে প্লাগইনটি ব্রাউজারের অনুরোধ-হ্যান্ডলিং আচরণের সাথে বিরোধপূর্ণ।

ক্রস-অরিজিন অনুরোধগুলি এবং সমস্যা সমাধান কীভাবে পরিচালনা করবেন তা বোঝা CORS ত্রুটি ReactJS-এ একটি মসৃণ উন্নয়ন প্রক্রিয়ার জন্য অপরিহার্য। অননুমোদিত ক্লায়েন্টদের কাছ থেকে অ্যাক্সেস নিয়ন্ত্রণ করার জন্য Swiggy-এর মতো API-এ প্রায়ই নিরাপত্তা স্তর থাকে, যেমন CORS। এই বিধিনিষেধগুলি ত্রুটির কারণ হতে পারে যা সঠিকভাবে সমাধান করা প্রয়োজন৷

এই নির্দেশিকায়, আমরা অন্বেষণ করব কেন এই ত্রুটিটি ঘটে, বিশেষ করে Chrome এ একটি CORS প্লাগইন যোগ করার পরে। আপনার Swiggy API এর সাথে কাজ করার সময় আমরা এটি সমাধান করার কৌশলগুলি নিয়েও আলোচনা করব প্রতিক্রিয়া অ্যাপ্লিকেশন

আদেশ ব্যবহারের উদাহরণ
fetch() এই কমান্ডটি Swiggy API এ HTTP অনুরোধ করতে ব্যবহৃত হয়। এটি অ্যাসিঙ্ক্রোনাসভাবে সংস্থানগুলি নিয়ে আসে এবং একটি প্রতিশ্রুতি প্রদান করে, যা একটি প্রতিক্রিয়া অবজেক্টে সমাধান করে। API থেকে রেস্তোরাঁর ডেটা পুনরুদ্ধার করার জন্য এটি গুরুত্বপূর্ণ।
useEffect() প্রতিক্রিয়ায় ব্যবহৃত, এই হুকটি উপাদান রেন্ডার করার পরে API কলগুলির মতো পার্শ্ব প্রতিক্রিয়াগুলি সম্পাদনের অনুমতি দেয়। এটি নিশ্চিত করে যে একবার কম্পোনেন্ট মাউন্ট করা হলে Swiggy-এর API-তে আনার অনুরোধ করা হয়।
res.setHeader() এই এক্সপ্রেস কমান্ড কাস্টম HTTP হেডার সেট করে, যেমন অ্যাক্সেস-নিয়ন্ত্রণ-অনুমতি-উৎপত্তি, যা CORS পরিচালনার ক্ষেত্রে অত্যন্ত গুরুত্বপূর্ণ। এটি ব্যাকএন্ডকে যেকোন উৎস থেকে অনুরোধের অনুমতি দিতে সক্ষম করে, CORS ত্রুটি প্রতিরোধ করে।
res.json() এই পদ্ধতিটি ক্লায়েন্টের কাছে একটি JSON প্রতিক্রিয়া পাঠাতে ব্যবহৃত হয়। প্রক্সি সার্ভার সমাধানে, এটি নিশ্চিত করে যে সুইগি থেকে আনা API ডেটা JSON ফর্ম্যাট হিসাবে ফেরত দেওয়া হয়েছে, যা সামনের প্রান্ত সহজেই গ্রাস করতে পারে।
await এই কীওয়ার্ডটি অ্যাসিঙ্ক্রোনাস ফাংশনের সম্পাদনে বিরতি দেয় যতক্ষণ না আনয়ন ক্রিয়াকলাপ সমাধান হয়, কোডটি এগিয়ে যাওয়ার আগে API-এর ডেটার জন্য অপেক্ষা করে তা নিশ্চিত করে, অনিয়ন্ত্রিত প্রত্যাখ্যান প্রতিরোধ করে।
express() এক্সপ্রেস() একটি এক্সপ্রেস সার্ভারের একটি উদাহরণ তৈরি করতে ফাংশন ব্যবহার করা হয়। ডেটা আনার সময় CORS সমস্যা প্রতিরোধ করতে এই সার্ভারটি ফ্রন্টএন্ড এবং Swiggy API-এর মধ্যে একটি প্রক্সি হিসেবে কাজ করে।
app.listen() এই কমান্ডটি এক্সপ্রেস সার্ভারকে একটি নির্দিষ্ট পোর্টে (যেমন, পোর্ট 5000 এই ক্ষেত্রে) ইনকামিং অনুরোধের জন্য শোনা শুরু করে। বিকাশের সময় স্থানীয়ভাবে প্রক্সি সার্ভার হোস্ট করার জন্য এটি অত্যন্ত গুরুত্বপূর্ণ।
try...catch এই ব্লকটি আনয়নের অনুরোধের সময় ঘটতে পারে এমন ত্রুটিগুলি পরিচালনা করে, যেমন নেটওয়ার্ক ব্যর্থতা বা Swiggy API এর সমস্যা। এটি নিশ্চিত করে যে অ্যাপটি ক্র্যাশ হওয়ার পরিবর্তে সুন্দরভাবে ত্রুটিগুলি পরিচালনা করে।

Swiggy API এর সাথে প্রতিক্রিয়ায় CORS সমস্যার সমাধান ব্যাখ্যা করা

প্রথম সমাধানে, আমরা একটি তৈরি করেছি Node.js Swiggy's API থেকে রেস্তোরাঁর ডেটা আনার সময় CORS সমস্যাটি বাইপাস করতে Express ব্যবহার করে ব্যাকএন্ড। CORS নীতি ব্রাউজারগুলিকে একটি ভিন্ন ডোমেনে অনুরোধ করতে বাধা দেয় যদি না সেই ডোমেন এটির অনুমতি দেয়৷ একটি সাধারণ সার্ভার তৈরি করে, আমরা ক্লায়েন্ট এবং API-এর মধ্যে একটি মধ্যম স্তর হিসাবে কাজ করতে পারি, ডেটা সার্ভার-সাইড আনয়ন করতে পারি এবং এটিকে রিঅ্যাক্ট ফ্রন্ট-এন্ডে ফিরিয়ে দিতে পারি। এই পদ্ধতিটি CORS ত্রুটিগুলি এড়ায় কারণ অনুরোধটি ক্লায়েন্ট অ্যাপের মতো একই উত্স থেকে আসে৷

এক্সপ্রেস ব্যাকএন্ড কাস্টম হেডার সেট আপ করে, বিশেষ করে অ্যাক্সেস-নিয়ন্ত্রণ-অনুমতি-উৎপত্তি, যা আমাদের ক্লায়েন্টকে CORS সীমাবদ্ধতার সম্মুখীন না হয়ে সংস্থানগুলির জন্য অনুরোধ করতে দেয়৷ Swiggy-এর API-এ আনা কল সার্ভার-সাইড করা হয় এবং ডেটা JSON ফর্ম্যাটে ফেরত দেওয়া হয়। এই পদ্ধতিটি প্রায়শই উত্পাদন পরিবেশে আরও নিরাপদ এবং কার্যকরী হিসাবে বিবেচিত হয় কারণ এটি API কী বা সংবেদনশীল তথ্য লুকিয়ে রাখে। অধিকন্তু, ট্রাই-ক্যাচের ব্যবহার যথাযথ ত্রুটি পরিচালনা নিশ্চিত করে, ব্যবহারকারী-বান্ধব ত্রুটি বার্তা প্রদর্শন করে যদি API সাড়া দিতে ব্যর্থ হয়।

দ্বিতীয় সমাধানে, আমরা ক্লায়েন্ট-সাইড প্রতিক্রিয়া কোডে আনার অনুরোধ পরিবর্তন করি। এই পদ্ধতিতে আনয়ন কলে কাস্টম শিরোনাম যোগ করা জড়িত, যাতে নিশ্চিত করা হয় যে API এ পৌঁছানোর আগে অনুরোধটি সঠিকভাবে ফর্ম্যাট করা হয়েছে। আমরা প্রতিক্রিয়া এর ব্যবহার ইফেক্ট ব্যবহার করুন কম্পোনেন্ট মাউন্ট হলে API কল ট্রিগার করতে হুক। অ্যাসিঙ্ক ফাংশন API প্রতিক্রিয়ার জন্য অপেক্ষা করে, এটিকে JSON-এ রূপান্তর করে এবং অনুরোধ ব্যর্থ হলে ত্রুটিগুলি পরিচালনা করে। যাইহোক, এই সমাধানটি এখনও CORS সমস্যার সম্মুখীন হয় যদি API সরাসরি ব্রাউজার থেকে ক্রস-অরিজিন অনুরোধগুলিকে অনুমতি না দেয়।

অবশেষে, তৃতীয় সমাধানে, আমরা CORS-Anywhere নামে একটি তৃতীয় পক্ষের পরিষেবা ব্যবহার করি। এটি একটি মিডলওয়্যার পরিষেবা যা অস্থায়ীভাবে তাদের সার্ভারের মাধ্যমে API অনুরোধকে পুনরায় রুট করে CORS সীমাবদ্ধতা বাইপাস করতে সহায়তা করে। যদিও এই সমাধানটি উন্নয়ন পরিবেশে কাজ করতে পারে, নিরাপত্তা ঝুঁকি এবং বাহ্যিক পরিষেবাগুলির উপর নির্ভরতার কারণে এটি উৎপাদনের জন্য সুপারিশ করা হয় না। এটি কর্মক্ষমতা ওভারহেড প্রবর্তন করে কারণ এটি ডেটা আনার প্রক্রিয়াতে একটি অতিরিক্ত স্তর যুক্ত করে। পরীক্ষার পর্যায়গুলির সময় এই পদ্ধতিটি ব্যবহার করা সুবিধাজনক হতে পারে তবে নিরাপত্তার কারণে উৎপাদনে এড়ানো উচিত।

সমাধান 1: প্রক্সি সার্ভারের সাথে CORS সমস্যাগুলি পরিচালনা করা

এই সমাধানটি CORS ত্রুটি এড়াতে এবং Swiggy API থেকে সঠিকভাবে ডেটা আনতে একটি 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-Anywhere Middleware ব্যবহার করা

এই পদ্ধতিটি বিকাশ মোডে থাকাকালীন 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;

API অনুরোধে CORS সমস্যা সমাধান করা

একটি প্রতিক্রিয়া অ্যাপ্লিকেশনে "আনয়নে ব্যর্থ" ত্রুটির একটি অন্তর্নিহিত কারণ, বিশেষ করে যখন Swiggy-এর মতো তৃতীয় পক্ষের API ব্যবহার করা হয়, CORS (ক্রস-অরিজিন রিসোর্স শেয়ারিং) সীমাবদ্ধতা। CORS হল একটি নিরাপত্তা বৈশিষ্ট্য যা ওয়েব অ্যাপ্লিকেশনগুলিকে যে ডোমেনে পরিবেশন করা হয়েছিল তার চেয়ে ভিন্ন ডোমেনে অনুরোধ করতে বাধা দেয়। এই ক্ষেত্রে, Swiggy API অনুরোধটি প্রত্যাখ্যান করে কারণ এটি একটি ভিন্ন ডোমেন (আপনার প্রতিক্রিয়া অ্যাপ) থেকে এসেছে। এটি বিশেষত সমস্যাযুক্ত যখন আপনি API গুলি থেকে ডেটা আনছেন যা স্পষ্টভাবে ক্রস-অরিজিন অনুরোধগুলিকে সমর্থন করে না৷

একটি সাধারণ সমাধান হল "Allow CORS" Chrome এক্সটেনশনের মতো ব্রাউজার এক্সটেনশনগুলি ব্যবহার করা৷ যাইহোক, এই ধরনের এক্সটেনশন অসামঞ্জস্যপূর্ণ ফলাফল হতে পারে. এর কারণ তারা ব্রাউজার-স্তরের সেটিংস ম্যানিপুলেট করে যা সবসময় API অনুরোধের সাথে সঠিকভাবে সিঙ্ক্রোনাইজ করে না। এই প্লাগইনগুলি আদর্শভাবে শুধুমাত্র উন্নয়নের জন্য ব্যবহার করা উচিত এবং উৎপাদন পরিবেশে নয়। উত্পাদনের জন্য, একটি নিরাপদ এবং আরও নির্ভরযোগ্য পদ্ধতির জন্য একটি ব্যাকএন্ড প্রক্সি সার্ভার ব্যবহার করা হবে যা আপনার প্রতিক্রিয়া অ্যাপের পক্ষ থেকে ডেটার জন্য অনুরোধ করে, যেমনটি আগে দেওয়া সমাধানগুলিতে দেখা গেছে।

বিবেচনা করার আরেকটি দিক হল কার্যকরভাবে ত্রুটিগুলি পরিচালনা করা। যদিও CORS সমস্যাগুলি "আনয়নে ব্যর্থ" ত্রুটির একটি সাধারণ কারণ, অন্যান্য কারণ যেমন নেটওয়ার্ক অস্থিরতা, ভুল API URL, বা সার্ভার ডাউনটাইমও এই ত্রুটির কারণ হতে পারে৷ অতএব, এটি বাস্তবায়ন করা গুরুত্বপূর্ণ শক্তিশালী ত্রুটি পরিচালনা আপনার কোডে, বিশেষ করে যখন তৃতীয় পক্ষের API-এর সাথে কাজ করে। একটি সঠিক ত্রুটি-হ্যান্ডলিং পদ্ধতি সমস্যাটিকে আরও কার্যকরভাবে ডিবাগ করতে এবং কিছু ভুল হলে ব্যবহারকারী-বান্ধব বার্তা প্রদান করতে সহায়তা করবে।

প্রতিক্রিয়াতে CORS এবং API অনুরোধ সম্পর্কে সাধারণ প্রশ্ন

  1. CORS কি এবং কেন এটি গুরুত্বপূর্ণ?
  2. CORS (ক্রস-অরিজিন রিসোর্স শেয়ারিং) হল একটি নিরাপত্তা নীতি যা অবিশ্বস্ত ডোমেনগুলি থেকে ক্ষতিকারক অনুরোধগুলি প্রতিরোধ করার জন্য ব্রাউজার দ্বারা প্রয়োগ করা হয়। এটি নিশ্চিত করে যে শুধুমাত্র নির্দিষ্ট ডোমেনগুলিকে একটি সার্ভার থেকে সংস্থানগুলি আনার অনুমতি দেওয়া হয়েছে৷
  3. কেন আমি "আনহ্যান্ডেলড প্রত্যাখ্যান (TypeError): আনতে ব্যর্থ" পাচ্ছি?
  4. এই ত্রুটিটি সাধারণত ঘটে যখন আপনার API অনুরোধ CORS সীমাবদ্ধতার কারণে ব্লক করা হয়। এটি ভুল API URL বা সার্ভারের সমস্যার কারণেও হতে পারে।
  5. কি করে useEffect হুক এই প্রসঙ্গে করতে?
  6. useEffect কম্পোনেন্ট মাউন্ট করার পরে একটি API অনুরোধ ট্রিগার করতে প্রতিক্রিয়াতে হুক ব্যবহার করা হয়। এটি নিশ্চিত করে যে আনয়ন অপারেশন সঠিক সময়ে ঘটে, একাধিক অপ্রয়োজনীয় অনুরোধ প্রতিরোধ করে।
  7. আমি কিভাবে একটি প্রতিক্রিয়া অ্যাপ্লিকেশনে CORS ত্রুটিগুলি ঠিক করতে পারি?
  8. CORS ত্রুটিগুলি ঠিক করতে, আপনি একটি ব্যাকএন্ড প্রক্সি ব্যবহার করতে পারেন, এর সাথে সঠিক শিরোনাম সেট করুন৷ res.setHeader সার্ভারে, অথবা উন্নয়নের উদ্দেশ্যে CORS-Anywhere এর মতো পরিষেবাগুলির উপর নির্ভর করুন৷
  9. আমি কি উৎপাদনে CORS ব্রাউজার এক্সটেনশন ব্যবহার করতে পারি?
  10. না, CORS ব্রাউজার এক্সটেনশন শুধুমাত্র উন্নয়নের জন্য ব্যবহার করা উচিত। উৎপাদনে, সার্ভারে CORS কনফিগার করা বা প্রক্সি সার্ভার ব্যবহার করা নিরাপদ।

প্রতিক্রিয়ায় CORS ত্রুটিগুলি পরিচালনার বিষয়ে চূড়ান্ত চিন্তাভাবনা

থার্ড-পার্টি এপিআই ব্যবহার করে এমন রিঅ্যাক্ট অ্যাপ্লিকেশন ডেভেলপ করার সময় CORS ত্রুটি একটি সাধারণ চ্যালেঞ্জ। যদিও ব্রাউজার এক্সটেনশনগুলি উন্নয়নে সাহায্য করতে পারে, নিরাপত্তা এবং ডেটা অখণ্ডতা বজায় রাখার জন্য উত্পাদন পরিবেশে একটি প্রক্সি সার্ভারের মতো আরও নির্ভরযোগ্য সমাধান বাস্তবায়ন করা গুরুত্বপূর্ণ।

সঠিক কৌশলগুলি ব্যবহার করে, যেমন ত্রুটি পরিচালনা এবং ব্যাকএন্ড সমাধান, বিকাশকারীরা দক্ষতার সাথে "আনয়নে ব্যর্থ" এর মতো সমস্যাগুলি পরিচালনা করতে পারে৷ এটি নিশ্চিত করে যে তাদের অ্যাপ্লিকেশনটি API এর সাথে ইন্টারঅ্যাক্ট করার সময় একটি মসৃণ ব্যবহারকারীর অভিজ্ঞতা প্রদান করে, কর্মক্ষমতা এবং কার্যকারিতা বাড়ায়।

প্রতিক্রিয়াতে CORS সমস্যাগুলি বোঝার জন্য তথ্যসূত্র এবং উত্স উপাদান
  1. ক্রস-অরিজিন রিসোর্স শেয়ারিং (সিওআরএস) সম্পর্কে বিস্তারিত তথ্যের জন্য এবং কীভাবে এটি প্রতিক্রিয়াতে পরিচালনা করতে হয়, দেখুন CORS-এ MDN ওয়েব ডক্স .
  2. "আনয়নে ব্যর্থ" এবং সম্ভাব্য সমাধানগুলির মতো সাধারণ প্রতিক্রিয়া ত্রুটিগুলি সম্পর্কে আরও বুঝতে, পরীক্ষা করুন৷ ত্রুটি সীমানা উপর ডকুমেন্টেশন প্রতিক্রিয়া .
  3. আপনি যদি CORS সমস্যাগুলিকে বাইপাস করার জন্য একটি প্রক্সি সার্ভার সেট আপ করার জন্য Express এর সাথে কাজ করেন তবে যান৷ Express.js রাউটিং এবং মিডলওয়্যার .
  4. জাভাস্ক্রিপ্টে ফেচ এপিআই-এর সাথে কীভাবে কাজ করবেন সে সম্পর্কে সহায়তার জন্য দেখুন ফেচ API-এ MDN ওয়েব ডক্স .
  5. অফিসিয়াল API ডকুমেন্টেশনে রেস্তোরাঁর ডেটার জন্য কীভাবে Swiggy's API ব্যবহার করবেন তা অন্বেষণ করুন: সুইগি API .