Hvordan lage HTTP-forespørsler i Node.js med node-fetch

Hvordan Lage Http Foresporsler I Node Js Med Node Fetch



HTTP-forespørslene er avgjørende og er laget for å hente informasjon fra URL-ene globalt, dvs. kalle på et nettsted, etc. Denne tilnærmingen trer i kraft når en nettapplikasjon må etablere kommunikasjon med webservere for å få tilgang til ressursene. For eksempel å hente eller legge ut dataene til en webserver eller API.

I JavaScript kan det utføres via ' window.fetch() 'metoden. Imidlertid, i ' node.js ”, kan denne funksjonaliteten oppnås ved å bruke flere pakker, dvs. nodehenting, etc.

Denne bloggen forklarer følgende innholdsområder:







Hva er 'node-henting'?

« node-henting ” tilsvarer en lettvektsmodul som gjør hente-API-en tilgjengelig for node.js. Denne modulen lar også brukerne bruke ' hente() ' metode i node.js som stort sett ligner på JavaScript ' window.fetch() 'metoden.



Syntaks(fetch()-metode)



hente ( url [ , alternativer ] ) ;

I denne syntaksen:





  • ' url ” refererer til URL-en til ressursen som må hentes/hentes.
  • « alternativer parameter er nødvendig når det er behov for å bruke 'fetch()'-metoden annet enn å lage en ' ' be om.

Returverdi

Denne funksjonen henter et Response-objekt som inneholder informasjon om et HTTP-svar som følger:



  • tekst: Henter svarkroppen i form av en streng.
  • overskrifter: Returnerer et objekt som består av responsbehandlerne.
  • json(): Analyserer svarteksten i et JSON-objekt.
  • statustekst/status: Omfatter informasjon om HTTP-statuskoden.
  • ok: Gir « ekte ” hvis statusen er en 2xx-statuskode.

Forutsetninger for bruk av node-henting

Følgende er forutsetningene som må vurderes før du starter med ' node-henting ':

  • Installert minst eller den nyeste enn 17.5-versjonen.
  • Grunnleggende kunnskap om JavaScript.

Hvordan lage HTTP-forespørsler i node.js med node-fetch?

Å gjøre HTTP-forespørslene er en asynkron prosedyre, da det tar litt tid å motta det forespurte svaret. Det er slik at det kan være to metoder for å utnytte de asynkrone prosedyrene. Den første er at brukeren kan vente på svaret og deretter fortsette med koden. Den andre kjører koden parallelt.

Hvordan komme i gang med node-henting?

Før du begynner med eller installerer ' node-henting ”-modul, initialiser et nodeprosjekt ved hjelp av kommandoen nedenfor:

npm init - og

Ved å utføre denne kommandoen opprettes en ' package.json '-filen i gjeldende katalog, som følger:

Installer nå ' node-henting '-modul ved å bruke følgende cmdlet:

npm installasjonsnode - hente

For å installere en målmodulversjon, bruk imidlertid følgende kommando:

npm installasjonsnode - hente@ 2.0

I dette tilfellet ' 2.0 '-versjonen av modulen vil bli installert.

Merk: Før du fortsetter med eksemplene, lag en ' index.mjs ”-filen i arbeidsområdet som skal brukes til å bruke funksjonene.

Eksempel 1: Send Hent forespørsler via node-henting

« node-henting ”-modulen kan brukes til å hente tekst fra en webserver eller dataene via Rest API.

Kodeeksemplet nedenfor skrevet i den opprettede ' index.mjs ”-filen lager en enkel Hent-forespørsel til YouTube-hjemmesiden:

import hente fra 'node-henting' ;

hente ( 'https://youtube.com' )

. deretter ( res => res. tekst ( ) )

. deretter ( tekst => konsoll. Logg ( tekst ) ) ;

I disse kodelinjene:

  • Last inn ' node-henting ”-modulen og hente YouTubes hjemmeside via den angitte URL-en som HTTP-forespørselen sendes til.
  • Deretter kjeder du ' deretter() ” metoder for å håndtere svaret og dataene fra den fremsatte forespørselen.
  • Den tidligere 'then()'-metoden indikerer at man venter på å få svaret fra YouTube-serveren og transformere det til tekstformat.
  • Den sistnevnte 'then()'-metoden betyr ventetiden på resultatet av forrige transformasjon og viser den på konsollen.

Produksjon

Kjør nå koden via følgende cmdlet:

nodeindeks. mjs

Utførelse av kommandoen ovenfor resulterer i å hente hele HTML-koden til YouTube-hjemmesiden som vises på konsollen:

Eksempel 2: Hent JSON-data fra Rest API

Dette eksemplet bruker ' node-henting ' for å få falske data via JSONPlassholder RestAPI. Det er slik at ' hente() ”-metoden omfatter serverens URL og venter på svar:

import hente fra 'node-henting' ;

hente ( 'https://jsonplaceholder.typicode.com/users' )

. deretter ( res => res. json ( ) )

. deretter ( json => {

konsoll. Logg ( 'First Array User -> ' ) ;

konsoll. Logg ( json [ 0 ] ) ;

konsoll. Logg ( 'First Array User Name -> ' ) ;

konsoll. Logg ( json [ 0 ] . Navn ) ;

} )

I henhold til denne kodeblokken, utfør følgende trinn:

  • HTTPS-kroppen består av JSON-formaterte data med brukerens data.
  • Etter det, ' json() ”-funksjonen brukes for å påkalle de individuelle oppføringene og de tilsvarende verdiene.

Produksjon

Bruk cmdleten nedenfor for å utføre koden:

nodeindeks. mjs

Eksempel 3: Post forespørsler via node-henting

« node-henting ”-modulen kan også brukes til å legge inn forespørslene i stedet for å hente dem. Dette kan oppnås via ' hente() ” metode som inkluderer en ekstra parameter for å sende POST-forespørsler til en server.

Det er flere alternativer som kan tildeles med denne parameteren. Imidlertid, i dette tilfellet ' metode ', ' kropp ' og ' overskrifter ' vil bli brukt. Følgende er beskrivelsen av hvert av alternativene:

  • « metode ' alternativet setter typen HTTP-forespørsler, dvs. 'POST' i dette scenariet.
  • « kropp alternativet omfatter forespørselens brødtekst.
  • « Overskrift '-alternativet inneholder alle de nødvendige overskriftene, dvs. ' Innholdstype ' i dette scenariet.

Gå nå videre til den praktiske implementeringen av å sende postforespørslene ved å legge til et nytt element til JSON-plassholderens ' alle '. Det gjøres ved å legge til et nytt element til listen med bruker-ID som '476':

import hente fra 'node-henting' ;

la alt = {

bruker-ID : 476 ,

nettstedet : 'Dette er Linuxhint' ,

fullført : falsk

} ;

hente ( 'https://jsonplaceholder.typicode.com/todos' , {

metode : 'POST' ,

kropp : JSON. stringify ( alle ) ,

overskrifter : { 'Innholdstype' : 'applikasjon/json' }

} ) . deretter ( res => res. json ( ) )

. deretter ( json => konsoll. Logg ( json ) ) ;

I denne koden:

  • Først av alt, lag et gjøremålsobjekt og transformer det til JSON mens du legger det til kroppen.
  • Nå, på samme måte, spesifiser URL-en med de nødvendige alternativene som ' hente() ' metodens valgfrie parametere.
  • Etter det bruker du ' JSON.stringify() ” metode for å transformere objektet til en formatert (JSON) streng før den sendes/overføres til webserveren.
  • Gå videre, implementer den kombinerte ' deretter() ”-metoder for å hente dataene ved å avvente responsen, transformere den til JSON og logge til konsollen.

Produksjon

Utfør kommandoen nedenfor for å utføre koden:

nodeindeks. mjs

Hva er HTTP-statuskodene?

Før du går videre til neste eksempel, sørg for at hvis svaret inneholder en ' 3xx ” statuskode, må de ekstra trinnene tas av klienten. På samme måte er ' 4xx '-koder representerer en ugyldig forespørsel og ' 5xx ”-koder tilsvarer serverfeilene.

Merk: « å fange() ”-funksjonen kan ikke takle de ovenfor diskuterte tilfellene siden serverkommunikasjonen foregår på en strømlinjeformet måte. Derfor er en effektiv tilnærming for å sikre at de mislykkede forespørslene returnerer feilen å definere en funksjon som analyserer HTTP-statusen til serverens svar.

Eksempel 4: Mestring av unntak og begrensninger

Det kan være flere begrensninger eller unntak med de sendte forespørslene, dvs. problemer med Internett, ' hente() ' funksjonsbegrensninger osv. Disse unntakene kan håndteres ved å legge til ' å fange() ' funksjon:

funksjon analyseStatus ( x ) {

hvis ( x. ok ) {

komme tilbake x

} ellers {

kaste ny Feil ( `HTTP-status i forhold til responsen -> $ { x. status } ( $ { x. statustekst } ) ` ) ;

}

}

hente ( 'https://jsonplaceholder.typicode.com/MissingResource' )

. deretter ( analyserStatus )

. deretter ( x => x. json ( ) )

. deretter ( json => konsoll. Logg ( json ) )

. å fange ( feil => konsoll. Logg ( feil ) ) ;

I denne kodebiten:

  • Definer først en funksjon som har den angitte parameteren før du analyserer svaret for å takle begrensningene.
  • Ta nå med ' hvis/annet ”-setninger for å kaste feilen eller en tilpasset begrensning.
  • Etter det, på samme måte, bruk ' hente() ”-metoden og de tilhørende “then()”-metodene for å hente dataene ved å avvente svaret, transformere det til JSON og logge på konsollen.
  • Til slutt kan kjøretidsunntakene håndteres ved å plassere ' å fange() ”-metoden ved løftekjedens ende.

Produksjon

Til slutt, kjør den nedenfor gitte cmdleten for å kjøre koden og kaste unntakene:

nodeindeks. mjs

Andre brukstilfeller av 'node-henting'

« node-henting ' kan også brukes til å lage ' API-forespørsler ' eller ' Nettskraping '. La oss diskutere disse brukstilfellene i detalj.

Bruk av node-henting for å lage API-forespørsler

API-en kan kreves i flere scenarier for å hente måldataene via en back-end-kilde. HTTP-forespørslene kan ha mange autentiseringsmetoder som å bruke en API-nøkkel der API-leverandøren gir en nøkkel som er begrenset til kun brukeren. En annen tilnærming for å skjerme API kan være via ' Grunnleggende autentisering ” der en header må sendes for å påkalle API.

Følgende er demonstrasjonen av sistnevnte tilnærming, dvs. 'Grunnleggende autentisering' i postforespørsel ved hjelp av ' hente() ' metode:

( asynkron ( ) => {

konst x = venter på henting ( 'http://httpbin.org/post' , {

metode : 'POST' ,

overskrifter : {

'Autorisasjon' : `Grunnleggende $ { bror ( 'innloggings passord' ) } `

} ,

kropp : JSON. stringify ( {

'nøkkel' : 'verdi'

} )

} ) ;

konst resultat = vent x. tekst ( ) ;

konsoll. Logg ( resultat ) ;

} ) ( ) ;

I demonstrasjonen ovenfor sendes en header med en ' base64 ' kodet streng av formatet ' innloggings passord '.

Bruk av node-henting for nettskraping

' Nettskraping ” refererer til teknikken der data/innhold hentes fra nettstedene og analyseres. Denne parsingen oppnås via ' cheerio ' bibliotek.

Nedenfor er demonstrasjonen av å hente sidens tittel via ' hente() 'metode og ' cheerio ' bibliotek:

konst lib = krever ( 'oppmuntre' ) ;

( asynkron ( ) => {

konst x = venter på henting ( 'https://linuxhint.com/' ) ;

konst og = vent x. tekst ( ) ;

konst $ = lib. laste ( og ) ;

konsoll. Logg ( $ ( 'tittel' ) . først ( ) . tekst ( ) ) ;

} ) ( ) ;

Dette eksemplet henter flisen til ' Linux ' nettstedets tittel.

Konklusjon

HTTP-forespørslene i node.js kan gjøres med node-henting ved å sende get-forespørsler, hente JSON-data fra REST API eller sende postforespørsler. Unntakene og begrensningene kan også håndteres effektivt via ' å fange() ' funksjon.