ReactJS: pēc Chrome CORS spraudņa pievienošanas neizdevās ienest neapstrādātu noraidīšanu (tipa kļūda).

Temp mail SuperHeros
ReactJS: pēc Chrome CORS spraudņa pievienošanas neizdevās ienest neapstrādātu noraidīšanu (tipa kļūda).
ReactJS: pēc Chrome CORS spraudņa pievienošanas neizdevās ienest neapstrādātu noraidīšanu (tipa kļūda).

API kļūdu apstrāde programmā React: CORS spraudņu izaicinājumi

Strādājot ar API ReaģētJS, izstrādātāji bieži saskaras ar dažādām problēmām, kas saistītas ar datu iegūšanu, it īpaši, strādājot ar trešo pušu API. Viena no izplatītākajām problēmām ir kļūda "Neapstrādāta noraidīšana (tipa kļūda): neizdevās ielādēt". Šī kļūda var rasties pat tad, ja tiek izmantotas populāras API, piemēram, Swiggy restorānu saraksta API, ko daudzi izstrādātāji izmanto, lai uzlabotu savas tīmekļa lietojumprogrammas.

Šādā gadījumā CORS Chrome paplašinājuma pievienošana varētu šķist dzīvotspējīgs risinājums, lai apietu ierobežojošās pārlūkprogrammas politikas. Tomēr tas var radīt jaunas komplikācijas, nevis atrisināt problēmu. Ja izstrādes vidē izmantojat CORS spraudni un jūsu API pieprasījumi neizdodas neilgi pēc ielādes, iespējams, rodas problēma, kuras dēļ spraudnis ir pretrunā ar pārlūkprogrammas pieprasījumu apstrādes darbību.

Izpratne par to, kā pārvaldīt vairāku izcelsmes pieprasījumus un novērst problēmas CORS kļūdas ReactJS ir būtiska vienmērīgam izstrādes procesam. API, piemēram, Swiggy's, bieži vien ir drošības slāņi, piemēram, CORS, lai kontrolētu neautorizētu klientu piekļuvi. Šie ierobežojumi var radīt kļūdas, kas ir pareizi jānovērš.

Šajā rokasgrāmatā mēs izpētīsim, kāpēc šī kļūda rodas, jo īpaši pēc CORS spraudņa pievienošanas pārlūkā Chrome. Mēs arī apspriedīsim stratēģijas, kā to atrisināt, strādājot ar Swiggy API jūsu ierīcē Reaģēt lietojumprogrammas.

Komanda Lietošanas piemērs
fetch() Šī komanda tiek izmantota, lai veiktu HTTP pieprasījumus Swiggy API. Tas ienes resursus asinhroni un atgriež solījumu, kas tiek atrisināts uz atbildes objektu. Tas ir galvenais, lai izgūtu restorānu datus no API.
useEffect() Izmantojot React, šis āķis ļauj izpildīt blakusparādības, piemēram, API izsaukumus pēc komponenta renderēšanas. Tas nodrošina, ka Swiggy API ielādes pieprasījums tiek veikts, tiklīdz komponents ir uzstādīts.
res.setHeader() Šī Express komanda iestata pielāgotas HTTP galvenes, piemēram, Access-Control-Allow-Origin, kam ir izšķiroša nozīme CORS apstrādē. Tas ļauj aizmugursistēmai atļaut pieprasījumus no jebkuras izcelsmes, novēršot CORS kļūdas.
res.json() Šī metode tiek izmantota, lai klientam nosūtītu JSON atbildi. Starpniekservera risinājumā tas nodrošina, ka API dati, kas iegūti no Swiggy, tiek atgriezti JSON formātā, ko priekšgals var viegli izmantot.
await Šis atslēgvārds aptur asinhronās funkcijas izpildi, līdz tiek atrisināta nolasīšanas darbība, nodrošinot, ka kods gaida API datus pirms turpināšanas, tādējādi novēršot neapstrādātus noraidījumus.
express() The izteikt () funkcija tiek izmantota, lai izveidotu Express servera gadījumu. Šis serveris darbojas kā starpniekserveris starp frontend un Swiggy API, lai novērstu CORS problēmas datu ielādes laikā.
app.listen() Šī komanda liek Express serverim sākt klausīties ienākošos pieprasījumus noteiktā portā (piemēram, šajā gadījumā portā 5000). Tas ir ļoti svarīgi, lai izstrādes laikā lokāli mitinātu starpniekserveri.
try...catch Šis bloks apstrādā kļūdas, kas var rasties nolasīšanas pieprasījuma laikā, piemēram, tīkla kļūmes vai problēmas ar Swiggy API. Tas nodrošina, ka lietotne graciozi apstrādā kļūdas, nevis avarē.

Izskaidrojot risinājumus CORS problēmām React ar Swiggy API

Pirmajā risinājumā mēs izveidojām a Node.js aizmugursistēma, izmantojot Express, lai apietu CORS problēmu, ienesot restorāna datus no Swiggy API. CORS politika neļauj pārlūkprogrammām veikt pieprasījumus citam domēnam, ja vien šis domēns to neatļauj. Izveidojot vienkāršu serveri, mēs varam darboties kā vidējais slānis starp klientu un API, iegūstot datu servera pusi un atgriežot to React priekšgalam. Šī metode ļauj izvairīties no CORS kļūdām, jo ​​pieprasījums nāk no tās pašas izcelsmes kā klienta lietotne.

Express aizmugursistēma iestata pielāgotas galvenes, jo īpaši Access-Control-Allow-Origin, kas ļauj mūsu klientam pieprasīt resursus, nesaskaroties ar CORS ierobežojumiem. Swiggy API ielādes izsaukums tiek veikts servera pusē, un dati tiek atgriezti JSON formātā. Šī pieeja ražošanas vidēs bieži tiek uzskatīta par drošāku un efektīvāku, jo tā slēpj API atslēgas vai sensitīvu informāciju. Turklāt try-catch izmantošana nodrošina pareizu kļūdu apstrādi, parādot lietotājam draudzīgus kļūdu ziņojumus, ja API nereaģē.

Otrajā risinājumā mēs modificējam ieneses pieprasījumu klienta puses React kodā. Šī metode ietver pielāgotu galveņu pievienošanu ieneses izsaukumā, nodrošinot, ka pieprasījums ir pareizi formatēts pirms API sasniegšanas. Mēs izmantojam React useEffect āķis, lai aktivizētu API izsaukumu, kad komponents tiek uzstādīts. Asinhronā funkcija gaida API atbildi, pārvērš to par JSON un apstrādā kļūdas, ja pieprasījums neizdodas. Tomēr šis risinājums joprojām saskaras ar CORS problēmām, ja API tieši neatļauj pārrobežu izcelsmes pieprasījumus no pārlūkprogrammām.

Visbeidzot, trešajā risinājumā mēs izmantojam trešās puses pakalpojumu CORS-Anywhere. Šis ir starpprogrammatūras pakalpojums, kas īslaicīgi palīdz apiet CORS ierobežojumus, novirzot API pieprasījumu caur savu serveri. Lai gan šis risinājums var darboties izstrādes vidēs, tas nav ieteicams ražošanai drošības risku un atkarības no ārējiem pakalpojumiem dēļ. Tas arī ievieš papildu veiktspējas izmaksas, jo tas pievieno papildu slāni datu iegūšanas procesam. Šīs metodes izmantošana var būt ērta testēšanas fāzēs, taču drošības apsvērumu dēļ no tās jāizvairās ražošanā.

1. risinājums: CORS problēmu risināšana, izmantojot starpniekserveri

Šis risinājums izmanto Node.js aizmugursistēmas starpniekserveri, lai izvairītos no CORS kļūdām un pareizi iegūtu datus no Swiggy API.

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. risinājums: izmantojiet priekšgala ienesi ar pielāgotām galvenēm un kļūdu apstrādi

Šī pieeja maina ieneses pieprasījumu tieši programmā React, pievienojot pielāgotas galvenes un efektīvi apstrādājot kļūdas.

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. risinājums: CORS-Anywhere starpprogrammatūras izmantošana izstrādei

Šī metode izmanto pakalpojumu "CORS-Anywhere", lai apietu CORS ierobežojumus izstrādes režīmā. Šo risinājumu nevajadzētu izmantot ražošanā.

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 problēmu novēršana API pieprasījumos

Viens no kļūdas “Neizdevās ienest” iemesliem React lietojumprogrammā, īpaši, ja tiek izmantotas trešās puses API, piemēram, Swiggy, ir CORS (Cross-Origin Resource Sharing) ierobežojumi. CORS ir drošības līdzeklis, kas ierobežo tīmekļa lietojumprogrammu pieprasījumu veikšanu citā domēnā, nevis tajā, no kura tie tika apkalpoti. Šajā gadījumā Swiggy API noraida pieprasījumu, jo tas nāk no cita domēna (jūsu React lietotnes). Tas ir īpaši problemātiski, ja ienesat datus no API, kas nepārprotami neatbalsta vairāku izcelsmes pieprasījumus.

Izplatīts risinājums ir izmantot pārlūkprogrammas paplašinājumus, piemēram, Chrome paplašinājumu “Allow CORS”. Tomēr šādi paplašinājumi var radīt nekonsekventus rezultātus. Tas ir tāpēc, ka tie manipulē ar pārlūkprogrammas līmeņa iestatījumiem, kas ne vienmēr tiek pareizi sinhronizēti ar API pieprasījumiem. Ideālā gadījumā šos spraudņus vajadzētu izmantot tikai izstrādei, nevis ražošanas vidēs. Ražošanai drošāka un uzticamāka pieeja būtu aizmugursistēmas starpniekservera izmantošana, kas pieprasa datus jūsu React lietotnes vārdā, kā redzams iepriekš sniegtajos risinājumos.

Vēl viens aspekts, kas jāņem vērā, ir efektīva kļūdu apstrāde. Lai gan CORS problēmas ir izplatīts kļūdu “Neizdevās ienest” cēlonis, šo kļūdu var izraisīt arī citi faktori, piemēram, tīkla nestabilitāte, nepareizi API URL vai servera dīkstāve. Tāpēc ir svarīgi to īstenot spēcīga kļūdu apstrāde savā kodā, it īpaši, strādājot ar trešās puses API. Pareizs kļūdu apstrādes mehānisms palīdzēs efektīvāk atkļūdot problēmu un nodrošināt lietotājam draudzīgus ziņojumus, ja kaut kas noiet greizi.

Bieži uzdotie jautājumi par CORS un API pieprasījumiem pakalpojumā React

  1. Kas ir CORS un kāpēc tas ir svarīgi?
  2. CORS (Cross-Origin Resource Sharing) ir drošības politika, ko ievieš pārlūkprogrammas, lai novērstu ļaunprātīgus pieprasījumus no neuzticamiem domēniem. Tas nodrošina, ka tikai noteiktiem domēniem ir atļauts ienest resursus no servera.
  3. Kāpēc tiek parādīts ziņojums "Neapstrādāts noraidījums (TypeError): neizdevās ielādēt"?
  4. Šī kļūda parasti rodas, ja jūsu API pieprasījums tiek bloķēts CORS ierobežojumu dēļ. To var izraisīt arī nepareizi API vietrāži URL vai problēmas ar serveri.
  5. Ko dara useEffect āķis darīt šajā kontekstā?
  6. The useEffect hook in React tiek izmantots, lai aktivizētu API pieprasījumu pēc komponenta uzstādīšanas. Tas nodrošina, ka ielādes darbība notiek īstajā laikā, novēršot vairākus nevajadzīgus pieprasījumus.
  7. Kā es varu labot CORS kļūdas React lietojumprogrammā?
  8. Lai labotu CORS kļūdas, varat izmantot aizmugursistēmas starpniekserveri un iestatīt pareizas galvenes ar res.setHeader serverī vai attīstības nolūkos paļauties uz tādiem pakalpojumiem kā CORS-Anywhere.
  9. Vai ražošanā es varu izmantot CORS pārlūkprogrammas paplašinājumus?
  10. Nē, CORS pārlūkprogrammas paplašinājumus vajadzētu izmantot tikai izstrādei. Ražošanā ir drošāk konfigurēt CORS serverī vai izmantot starpniekserveri.

Pēdējās domas par CORS kļūdu pārvaldību React

CORS kļūdas ir izplatīta problēma, izstrādājot React lietojumprogrammas, kas patērē trešo pušu API. Lai gan pārlūkprogrammas paplašinājumi var palīdzēt izstrādē, ir ļoti svarīgi ražošanas vidēs ieviest uzticamākus risinājumus, piemēram, starpniekserveri, lai saglabātu drošību un datu integritāti.

Izmantojot pareizās metodes, piemēram, kļūdu apstrādi un aizmugursistēmas risinājumus, izstrādātāji var efektīvi risināt tādas problēmas kā “Neizdevās iznest”. Tas nodrošina, ka viņu lietojumprogramma nodrošina vienmērīgu lietotāja pieredzi, mijiedarbojoties ar API, uzlabojot veiktspēju un funkcionalitāti.

Atsauces un avota materiāli, lai izprastu CORS problēmas uzņēmumā React
  1. Detalizētu informāciju par vairāku izcelsmes resursu koplietošanu (CORS) un to, kā to pārvaldīt programmā React, skatiet MDN tīmekļa dokumenti vietnē CORS .
  2. Lai uzzinātu vairāk par izplatītākajām React kļūdām, piemēram, “Neizdevās izgūt”, un iespējamiem risinājumiem, pārbaudiet Reaģējiet uz dokumentāciju par kļūdu robežām .
  3. Ja strādājat ar Express, lai iestatītu starpniekserveri, lai apietu CORS problēmas, apmeklējiet vietni Express.js maršrutēšana un starpprogrammatūra .
  4. Palīdzību par to, kā strādāt ar Fetch API programmā JavaScript, skatiet MDN tīmekļa dokumenti pakalpojumā Fetch API .
  5. Oficiālajā API dokumentācijā izpētiet, kā izmantot Swiggy API restorānu datiem: Swiggy API .