Odpravljanje napak funkcij JavaScript pri pridobivanju menjalnih tečajev

Odpravljanje napak funkcij JavaScript pri pridobivanju menjalnih tečajev
Odpravljanje napak funkcij JavaScript pri pridobivanju menjalnih tečajev

Kako odpraviti napake v funkcijah pridobivanja stopnje JavaScript

JavaScript je učinkovito orodje za spletni razvoj, zlasti pri delu z zunanjimi API-ji. Vendar celo izkušeni razvijalci delajo tipične napake pri pisanju funkcij za pridobivanje podatkov iz API-jev. Ena taka težava se zgodi, ko poskušate poslati argumente v funkcijo in v odgovor dobite nedefinirane vrednosti.

Ta članek obravnava težavo pri pisanju funkcije JavaScript, ki pridobi tečaje bitcoinov med dvema valutama. Težavo »ReferenceError: btc ni definiran« pogosto povzročijo nepravilno določeni parametri in spremenljivke. Tem pomislekom se je mogoče izogniti, če je koda pravilno strukturirana.

Pokazali vam bomo, kako ustvarite funkcijo z imenom rešetka (od, do), ki sprejme dva parametra in vrne menjalni tečaj med obema valutama. Do konca te knjige boste vedeli, kako pravilno posredovati argumente in upravljati napake med procesi pridobivanja podatkov.

Če imate podobne težave ali ste prejeli napako »Ne morem prebrati lastnosti nedefiniranega (branje 'hitrost'),« vam bo ta članek pomagal odpraviti težave in jih učinkovito rešiti. Oglejmo si korak za korakom, kako odpraviti te težave.

Ukaz Primer uporabe
XMLHttpRequest() Ta konstruktor ustvari primerek XMLHttpRequest za izdelavo omrežnih zahtev. Široko se uporablja za asinhrone poizvedbe HTTP, zlasti v starejših spletnih projektih, ki ne uporabljajo Fetch.
open('GET', url, true) The odpri() definira vrsto zahteve (v tem primeru GET), ciljni URL in ali je zahteva asinhrona (true).
onload To je obravnavalec dogodkov v XMLHttpRequest, ki se sproži, ko se zahteva uspešno zaključi. Omogoča obdelavo odgovora, ko prejmete vse podatke.
prinesi () The prinesi () funkcija je sodobnejša in vsestranska metoda za izdelavo omrežnih zahtev. Vrne obljubo in se običajno uporablja v sodobnem JavaScriptu za izvajanje asinhronih klicev API-ja.
response.json() Ta metoda pretvori vrnjeni odgovor API-ja v objekt JavaScript. Zasnovan je predvsem za delo s podatki JSON, ki je priljubljena oblika za API-je.
async/počakaj The asinh ključna beseda povzroči, da funkcija vrne obljubo, medtem ko čakati ustavi izvajanje, dokler obljuba ni razrešena. Olajša rokovanje z asinhrono kodo.
poskusiti/ujeti Blok poskusi/ulovi elegantno obravnava napake. Ko delate s klici API-ja, je koristno ujeti vse izjeme, vržene zaradi težav z omrežjem ali neustreznih podatkov.
http.get() Funkcija Node.js http.get() pošlje zahtevo GET strežniku in obravnava odgovor. Bistvenega pomena je za izdelavo zahtev HTTP v zalednih aplikacijah Node.js.
šala-fetch-posmeh Poseben pripomoček za testiranje Jest za posmehovanje poizvedbam za pridobivanje v testih enot. Omogoča vam testiranje metod, ki se zanašajo na zunanje klice API-jev, tako da posnemajo njihove odzive.

Razumevanje, kako funkcije JavaScript obravnavajo zahteve API za tečaje kriptovalut

Tukaj priloženi skripti prikazujejo alternativne tehnike za pridobivanje menjalnih tečajev kriptovalut med dvema valutama z uporabo JavaScripta. Prvi skript uporablja objekt XMLHttpRequest, ki je ena od starejših tehnik za obravnavanje asinhronih zahtev HTTP v JavaScriptu. Funkcija rešetka (od, do) sprejme dva parametra: valute za pretvorbo. URL se generira dinamično na podlagi posredovanih parametrov, zahteva pa se pošlje končni točki API-ja Bitpay. Po prejemu odgovora se podatki razčlenijo z uporabo JSON.parse() prikaže menjalni tečaj v telesu dokumenta. Ta rešitev ohranja združljivost s starejšimi brskalniki, vendar nima nekaterih novejših zmožnosti, kot so obljube, ki so obravnavane v drugem primeru.

V drugem primeru je za izvedbo istega dejanja namesto XMLHttpRequest uporabljen API Fetch. Fetch API je novejši in ponuja lažji način za omrežne zahteve. Izkorišča obljube, da bo asinhroni tok bolj berljiv in obvladljiv. Ko je funkcija priklicana, pošlje zahtevo HTTP na isti URL in čaka na odgovor. Po prejemu odgovora pretvori podatke v objekt JSON in pridobi stopnjo. API Fetch izboljša upravljanje napak z uporabo blokov poskusi/ulovi za zbiranje in upravljanje morebitnih težav, ki se pojavijo med obdelavo zahteve ali podatkov.

Tretji scenarij je namenjen a zaledno okolje in izvaja poizvedbe API z modulom HTTP Node.js. To je še posebej koristno za razvoj strežniških aplikacij, ki potrebujejo pridobivanje menjalnih tečajev. Modul HTTP je vgrajen v Node.js in razvijalcem omogoča izvajanje operacij HTTP. Ta funkcija ustvari URL na enak način kot prejšnji skripti, pošlje klic GET API-ju in nato razčleni prejete podatke. Rezultat se zabeleži v konzolo in ne prikaže v brskalniku, zaradi česar je bolj primeren za zaledne scenarije, ki ne potrebujejo spletnih brskalnikov.

Nazadnje je vključen testni paket Jest za preverjanje, ali rešitev Fetch API deluje pravilno. Jest je priljubljeno ogrodje za testiranje in s šala-fetch-posmeh, lahko v naših testih posnemamo odzive API-ja. To omogoča razvijalcem, da preizkusijo svojo kodo, ne da bi dejansko ustvarili omrežne poizvedbe, kar pospeši postopek testiranja in izolira morebitne napake. Preizkusi preverjajo, ali so podatki o stopnji uspešno pridobljeni in prikazani v telesu dokumenta, kar potrjuje, da funkcija v različnih kontekstih deluje, kot je predvideno. Testiranje je pomemben element razvoja, zlasti pri delu z zunanjimi API-ji, saj pomaga odkriti napake zgodaj in izboljša splošno stabilnost izdelka.

JavaScript: Odpravljanje težave »ReferenceError: btc ni definiran«.

V sprednjem okolju ta metoda uporablja JavaScript in XMLHTTPRequest za pridobivanje dinamičnih podatkov.

// Solution 1: Using XMLHTTPRequest to fetch cryptocurrency rates
function grate(from, to) {
  var burl = 'https://bitpay.com/rates/';
  var url = burl + from + '/' + to;
  var ourRequest = new XMLHttpRequest();
  ourRequest.open('GET', url, true);
  ourRequest.onload = function() {
    if (ourRequest.status >= 200 && ourRequest.status < 400) {
      var response = JSON.parse(ourRequest.responseText);
      document.body.innerHTML = 'Rate: ' + response.data.rate;
    } else {
      console.error('Error fetching the data');
    }
  };
  ourRequest.onerror = function() {
    console.error('Connection error');
  };
  ourRequest.send();
}
// Test the function with actual currency codes
grate('btc', 'usd');

JavaScript: Fetch API je sodobnejši pristop k obravnavanju zahtev API.

Ta rešitev izboljšuje zmogljivost in obravnavanje napak sodobnih sprednjih aplikacij z uporabo JavaScripta in Fetch API-ja.

// Solution 2: Using Fetch API for cleaner asynchronous requests
async function grate(from, to) {
  var burl = 'https://bitpay.com/rates/';
  var url = burl + from + '/' + to;
  try {
    let response = await fetch(url);
    if (!response.ok) throw new Error('Network response was not ok');
    let data = await response.json();
    document.body.innerHTML = 'Rate: ' + data.data.rate;
  } catch (error) {
    console.error('Fetch error: ', error);
  }
}
// Test the function with Fetch API
grate('btc', 'usd');

Zaledje Node.js: Izdelava zahtev API z modulom HTTP Node

Ta metoda pridobi valutne tečaje z uporabo Node.js in modula HTTP v zalednih aplikacijah.

// Solution 3: Using Node.js HTTP module to fetch data from API
const http = require('http');
function grate(from, to) {
  const url = 'http://bitpay.com/rates/' + from + '/' + to;
  http.get(url, (resp) => {
    let data = '';
    resp.on('data', (chunk) => { data += chunk; });
    resp.on('end', () => {
      let rateData = JSON.parse(data);
      console.log('Rate: ' + rateData.data.rate);
    });
  }).on('error', (err) => {
    console.log('Error: ' + err.message);
  });
}
// Test the Node.js function
grate('btc', 'usd');

Preizkusi enot za čelne rešitve z uporabo Jest

Funkcionalnost rešitve JavaScript Fetch API je potrjena s testi enot, napisanimi v Jestu.

// Solution 4: Unit testing Fetch API using Jest
const fetchMock = require('jest-fetch-mock');
fetchMock.enableMocks();
test('grate() fetches correct rate data', async () => {
  fetch.mockResponseOnce(JSON.stringify({ data: { rate: 50000 }}));
  const rate = await grate('btc', 'usd');
  expect(document.body.innerHTML).toBe('Rate: 50000');
});

Raziskovanje asinhronih funkcij JavaScript za zahteve API

Ravnanje z asinhronimi zahtevami je ključnega pomena pri delu z API-ji v JavaScriptu. Fetch API in XMLHttpRequest sta dva osnovna načina za izdelavo teh zahtev. Namen asinhronih funkcij je preprečiti zamrznitev brskalnika ali strežnika med čakanjem na odgovor, s čimer se izboljša uporabniška izkušnja in zmogljivost. Razumevanje asinhronega vedenja razvijalcem omogoča izdelavo bolj odzivnih aplikacij, ki lahko v realnem času pridobijo podatke iz API-jev, ne da bi to vplivalo na glavno nit.

Ravnanje z asinhronimi zahtevami zahteva upravljanje odzivov in različnih napak, ki se lahko pojavijo med postopkom. Na primer, ena pogosta težava pri pridobivanju podatkov iz zunanjih API-jev je vračanje nedefinirane vrednosti, kot je razvidno iz napake v začetnem primeru. Če razvijalci ne uspejo učinkovito upravljati izjem, se lahko njihova aplikacija zruši ali povzroči netočne rezultate. Učinkovito obravnavanje napak, kot so poskusni/ulovni bloki ali preverjanja statusa odziva, je ključnega pomena.

Poleg obravnavanja napak je pri interakciji z zunanjimi API-ji pomemben dejavnik varnost. Izpostavitev občutljivih podatkov ali odobritev neposrednega dostopa do API-jev brez preverjanja lahko povzroči ranljivosti. Ena rešitev je implementacija zahtev na strani strežnika, pri katerih se klici API izvajajo iz zalednega strežnika, kar zagotavlja dodatno stopnjo varnosti. To zlonamernim akterjem prepoveduje vmešavanje v sprednje zahteve ali neposredno pridobivanje občutljivih podatkov prek brskalnika. Zaščita teh povezav API je ključnega pomena, zlasti pri obravnavanju finančnih informacij, kot so tečaji bitcoinov.

Pogosto zastavljena vprašanja o pridobivanju podatkov API z JavaScriptom

  1. Kakšna je razlika med XMLHttpRequest in Fetch API?
  2. Medtem ko se oba lahko uporabljata za pošiljanje poizvedb HTTP, je Fetch API sodobnejši in ima preprostejši vmesnik. Uporablja obljube, kar olajša obravnavo asinhronih procesov.
  3. Kako ravnam z napakami pri uporabi Fetch API?
  4. Če želite obravnavati napake, enkapsulirajte svojo zahtevo za pridobivanje znotraj a try/catch blokirajte in preverite stanje odgovora. Zaradi tega je vaša koda bolj odporna na napake.
  5. Zakaj prejmem nedefinirano vrednost, ko poskušam pridobiti podatke iz API-ja?
  6. To se običajno zgodi, ko so končna točka ali argumenti API-ja nepravilni ali če odgovor ni bil pravilno obdelan z JSON.parse().
  7. Ali lahko preizkusim zahteve API brez dejanskega omrežnega klica?
  8. Da, lahko uporabljate knjižnice, kot je jest-fetch-mock v Jest za posnemanje poizvedb API in odgovorov za testiranje.
  9. Kako lahko izboljšam varnost svojih zahtev API?
  10. Ena od možnosti za izboljšanje varnosti je pošiljanje zahtev iz zalednega strežnika in ne iz sprednjega dela. To skrije pomembne ključe API in zaščiti vašo aplikacijo pred zlonamernimi akterji.

Končne misli o obravnavanju napak API in zahtev

Razumevanje, kako obravnavati klice API-ja v JavaScriptu, je ključnega pomena za razvoj dinamičnih aplikacij. Z uporabo tehnologij, kot sta XMLHttpRequest in Fetch API, lahko razvijalci učinkovito pridobijo podatke v realnem času, kot so cene kriptovalut. Vendar je treba tipične težave, kot so nedefinirane lastnosti, ustrezno obravnavati.

Izvajanje ustreznega obravnavanja napak in postopkov testiranja naredi vašo kodo zanesljivejšo. Ne glede na to, ali razvijate sprednje ali zaledne aplikacije, bosta zaščita klicev API in implementacija sodobnih pristopov zagotovila varnejše in zmogljivejše spletne rešitve.

Viri in reference za obdelavo zahtev JavaScript API
  1. Razkriva, kako obravnavati zahteve API-ja v JavaScriptu z uporabo XMLHttpRequest in Fetch API, ki se nanaša na zunanje vodnike in dokumentacijo o asinhronem programiranju JavaScript. Obisk Spletni dokumenti MDN - XMLHttpRequest .
  2. Vključuje najboljše prakse pri obravnavanju napak in varovanju zahtev API-jev v sprednjem in zalednem razvoju. Referenca: Uradna dokumentacija Node.js – zahteve HTTP .
  3. Zagotavlja vpogled v preizkušanje funkcionalnosti API-ja z uporabo Jest in lažnih orodij, kot je šala-fetch-posmeh. Za več podrobnosti si oglejte Uradna dokumentacija Jest .