Sådan laver du HTTP-anmodninger i Node.js med node-fetch

Sadan Laver Du Http Anmodninger I Node Js Med Node Fetch



HTTP-anmodningerne er afgørende og er lavet for at hente information fra URL'erne globalt, dvs. at kalde et websted osv. Denne tilgang træder i kraft, når en webapplikation skal etablere kommunikation med webserverne for at få adgang til ressourcerne. For eksempel at hente eller sende dataene til en webserver eller API.

I JavaScript kan det udføres via ' window.fetch() ” metode. Men i ' node.js ”, kan denne funktionalitet opnås ved hjælp af flere pakker, dvs. node-hentning osv.

Denne blog forklarer følgende indholdsområder:







Hvad er 'node-fetch'?

Det ' node-hentning ” svarer til et letvægtsmodul, der gør hente-API'en tilgængelig for node.js. Dette modul giver også brugerne mulighed for at bruge ' hente() ' metode i node.js, som for det meste ligner JavaScript ' window.fetch() ” metode.



Syntaks(fetch()-metode)



hente ( url [ , muligheder ] ) ;

I denne syntaks:





  • url ' refererer til URL'en på den ressource, der skal hentes/hentes.
  • Det ' muligheder parameter er nødvendig, når der er behov for at bruge metoden 'fetch()' ud over at lave en ' ' anmodning.

Returværdi

Denne funktion henter et Response-objekt, der omfatter information om et HTTP-svar som følger:



  • tekst: Henter svarlegemet i form af en streng.
  • overskrifter: Returnerer et objekt, der omfatter svarbehandlerne.
  • json(): Parser svarteksten i et JSON-objekt.
  • statustekst/status: Omfatter oplysningerne vedrørende HTTP-statuskoden.
  • Okay: giver' rigtigt ” hvis status er en 2xx statuskode.

Forudsætninger for brug af node-fetch

Følgende er de forudsætninger, der skal overvejes, før du starter med ' node-hentning ”:

  • Installeret som minimum eller den seneste version end 17.5.
  • Grundlæggende kendskab til JavaScript.

Hvordan laver man HTTP-anmodninger i node.js med node-fetch?

At lave HTTP-anmodninger er en asynkron procedure, da det tager noget tid at modtage det anmodede svar. Det er sådan, at der kan være to metoder til at udnytte de asynkrone procedurer. Den første er, at brugeren kan vente på svaret og derefter genoptage med koden. Den anden udfører koden parallelt.

Hvordan kommer man i gang med node-fetch?

Før du starter med eller installerer ' node-hentning ”-modul, initialiser et nodeprojekt ved hjælp af nedenstående kommando:

npm init - og

Udførelse af denne kommando opretter en ' package.json ” fil i den aktuelle mappe, som følger:

Installer nu ' node-hentning ” modul ved hjælp af følgende cmdlet:

npm installationsnode - hente

Men for at installere en målmodulversion skal du bruge følgende kommando:

npm installationsnode - hente@ 2.0

I dette tilfælde er ' 2.0 ” version af modulet vil blive installeret.

Bemærk: Før du fortsætter med eksemplerne, skal du oprette en ' index.mjs ” fil i arbejdsområdet, der vil blive brugt til at anvende funktionaliteterne.

Eksempel 1: Send Hent anmodninger Via node-fetch

Det ' node-hentning ” modul kan bruges til at hente tekst fra en webserver eller data via Rest API.

Nedenstående kodeeksempel skrevet i den oprettede ' index.mjs ”-fil laver en simpel Hent anmodning til YouTube-hjemmesiden:

importere hente fra 'node-hentning' ;

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

. derefter ( res => res. tekst ( ) )

. derefter ( tekst => konsol. log ( tekst ) ) ;

I disse kodelinjer:

  • Indlæs ' node-hentning ” modul og hent YouTubes hjemmeside via den angivne URL, som HTTP-anmodningen er lavet til.
  • Derefter kæde ' derefter() ” metoder til at håndtere svaret og data fra den fremsatte anmodning.
  • Den tidligere 'then()'-metode indikerer at man venter på at få svaret fra YouTube-serveren og omdanne det til tekstformat.
  • Sidstnævnte 'then()'-metode betyder, at man venter på resultatet af den tidligere transformation og viser det på konsollen.

Produktion

Udfør nu koden via følgende cmdlet:

node indeks. mjs

Udførelse af ovenstående kommando resulterer i at hente hele HTML-markeringen af ​​YouTube-hjemmesiden, der vises på konsollen:

Eksempel 2: Hent JSON-data fra Rest API

Dette eksempel bruger ' node-hentning ” for at få falske data via JSONPlaceholder RestAPI. Det er sådan, at ' hente() ”-metoden omfatter serverens URL og afventer et svar:

importere hente fra 'node-hentning' ;

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

. derefter ( res => res. json ( ) )

. derefter ( json => {

konsol. log ( 'First Array User -> ' ) ;

konsol. log ( json [ 0 ] ) ;

konsol. log ( 'First Array User Name -> ' ) ;

konsol. log ( json [ 0 ] . navn ) ;

} )

I henhold til denne kodeblok skal du udføre følgende trin:

  • HTTPS-kroppen omfatter JSON-formaterede data med brugerens data.
  • Derefter vil ' json() ” funktion anvendes til at kalde de individuelle poster og de tilsvarende værdier.

Produktion

Anvend den nedenfor angivne cmdlet for at udføre koden:

node indeks. mjs

Eksempel 3: Post anmodninger via node-fetch

Det ' node-hentning ”-modulet kan også bruges til at sende anmodningerne i stedet for at hente dem. Dette kan opnås via ' hente() ” metode, der inkluderer en ekstra parameter til at lave POST-anmodninger til en server.

Der er flere muligheder, der kan tildeles med denne parameter. Men i dette tilfælde er ' metode ', ' legeme ' og ' overskrifter ' vil blive brugt. Følgende er beskrivelsen af ​​hver af mulighederne:

  • Det ' metode ' indstilling indstiller typen af ​​HTTP-anmodninger, dvs. 'POST' i dette scenarie.
  • Det ' legeme ” valgmulighed omfatter selve anmodningen.
  • Det ' header '-indstillingen indeholder alle de nødvendige overskrifter, dvs. ' Indholdstype ” i dette scenarie.

Gå nu videre til den praktiske implementering af at sende postanmodningerne ved at tilføje et nyt element til JSON-pladsholderens ' alle ”. Det gøres ved at tilføje et nyt element til listen med bruger-ID som '476':

importere hente fra 'node-hentning' ;

lad alt = {

bruger ID : 476 ,

websted : 'Dette er Linuxhint' ,

afsluttet : falsk

} ;

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

metode : 'STOLPE' ,

legeme : JSON. strenge ( alle ) ,

overskrifter : { 'Indholdstype' : 'applikation/json' }

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

. derefter ( json => konsol. log ( json ) ) ;

I denne kode:

  • Først og fremmest skal du oprette et todo-objekt og transformere det til JSON, mens du tilføjer det til kroppen.
  • Angiv nu også URL'en med de nødvendige muligheder som ' hente() ” metodens valgfrie parametre.
  • Anvend derefter ' JSON.stringify() ” metode til at transformere objektet til en formateret (JSON) streng, før det sendes/transmitteres til webserveren.
  • Gå videre, implementer den kombinerede ' derefter() ” metoder til at hente dataene ved at afvente svaret, transformere det til JSON, henholdsvis logge til konsollen.

Produktion

Udfør nedenstående kommando for at udføre koden:

node indeks. mjs

Hvad er HTTP-statuskoderne?

Før du går videre til næste eksempel, skal du sikre dig, at hvis svaret omfatter en ' 3xx ” statuskode, skal de ekstra trin tages af klienten. Ligeledes er ' 4xx ' koder repræsenterer en ugyldig anmodning og ' 5xx ”-koder svarer til serverfejlene.

Bemærk: Det ' fangst() ”-funktionen kan ikke klare de ovenfor omtalte tilfælde, da serverkommunikationen foregår på en strømlinet måde. Derfor er en effektiv tilgang til at sikre, at de mislykkede anmodninger returnerer fejlen, at definere en funktion, der analyserer HTTP-statussen for serverens svar.

Eksempel 4: Håndtering af undtagelser og begrænsninger

Der kan være flere begrænsninger eller undtagelser med de sendte anmodninger, dvs. problemer med internettet, ' hente() ' funktionsbegrænsninger osv. Disse undtagelser kan håndteres ved at tilføje ' fangst() ' funktion:

funktion analyseStatus ( x ) {

hvis ( x. Okay ) {

Vend tilbage x

} andet {

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

}

}

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

. derefter ( analysere Status )

. derefter ( x => x. json ( ) )

. derefter ( json => konsol. log ( json ) )

. fangst ( fejl => konsol. log ( fejl ) ) ;

I dette kodestykke:

  • Først skal du definere en funktion, der har den angivne parameter, før du parser svaret for at klare de begrænsninger, der står over for.
  • Medtag nu ' hvis ellers ”-udsagn til at kaste den konfronterede fejl eller en tilpasset begrænsning.
  • Derefter skal du på samme måde anvende ' hente() ”-metoden og de tilhørende “then()”-metoder til at hente dataene ved at afvente svaret, transformere det til JSON og logge ind på konsollen.
  • Endelig kan runtime-undtagelserne håndteres ved at placere ' fangst() ” metode i løftekædens ende.

Produktion

Til sidst skal du køre den nedenfor angivne cmdlet for at køre koden og kaste de udsatte undtagelser:

node indeks. mjs

Andre anvendelsestilfælde af 'node-fetch'

Det ' node-hentning ' kan også bruges til at lave ' API-anmodninger ' eller ' Web skrabning ”. Lad os diskutere disse use cases i detaljer.

Brug af node-fetch til at lave API-anmodninger

API'et kan kræves i flere scenarier for at hente måldataene via en back-end-kilde. HTTP-anmodningerne kan have mange metoder til godkendelse, såsom at bruge en API-nøgle, hvor API-udbyderen leverer en nøgle, der kun er begrænset til brugeren. En anden tilgang til at beskytte API'en kan være via ' Grundlæggende godkendelse ”, hvor en header skal sendes for at kalde API’en.

Følgende er demonstrationen af ​​sidstnævnte tilgang, dvs. 'Basic Authentication' i postanmodning ved hjælp af ' hente() ” metode:

( asynkron ( ) => {

konst x = afventer hentning ( 'http://httpbin.org/post' , {

metode : 'STOLPE' ,

overskrifter : {

'Bemyndigelse' : `Grundlæggende $ { brormand ( 'login kodeord' ) } `

} ,

legeme : JSON. strenge ( {

'nøgle' : 'værdi'

} )

} ) ;

konst resultat = afvent x. tekst ( ) ;

konsol. log ( resultat ) ;

} ) ( ) ;

I ovenstående demonstration sendes en header med en ' base64 ' kodet streng af formatet ' login kodeord ”.

Udnyttelse af node-fetch til Web Scraping

Web skrabning ” refererer til den teknik, hvor data/indhold hentes fra webstederne og parses. Denne parsing opnås via ' cheerio ” bibliotek.

Nedenfor er demonstrationen af ​​at hente sidens titel via ' hente() 'metode og ' cheerio ” bibliotek:

konst lib = kræve ( 'opmuntre' ) ;

( asynkron ( ) => {

konst x = afventer hentning ( 'https://linuxhint.com/' ) ;

konst og = afvent x. tekst ( ) ;

konst $ = lib. belastning ( og ) ;

konsol. log ( $ ( 'titel' ) . først ( ) . tekst ( ) ) ;

} ) ( ) ;

Dette eksempel henter flisen af ​​' Linux ' webstedets titel.

Konklusion

HTTP-anmodningerne i node.js kan laves med node-fetch ved at sende get-anmodninger, hente JSON-data fra REST API eller sende post-anmodninger. Undtagelserne og begrænsningerne kan også håndteres effektivt via ' fangst() ' funktion.