Paano Gumawa ng Mga Kahilingan sa HTTP sa Node.js gamit ang node-fetch

Paano Gumawa Ng Mga Kahilingan Sa Http Sa Node Js Gamit Ang Node Fetch



Ang mga kahilingan sa HTTP ay mahalaga at ginawa upang kumuha ng impormasyon mula sa mga URL sa buong mundo ibig sabihin, ang paggamit ng isang website, atbp. Ang diskarte na ito ay magkakabisa kapag ang isang web application ay kailangang magtatag ng komunikasyon sa mga web server upang ma-access ang mga mapagkukunan. Halimbawa, ang pagkuha o pag-post ng data sa isang web server o API.

Sa JavaScript, maaari itong isagawa sa pamamagitan ng ' window.fetch() ” paraan. Gayunpaman, sa ' node.js ”, ang functionality na ito ay maaaring makamit gamit ang maramihang mga pakete i.e., node-fetch, atbp.

Ipinapaliwanag ng blog na ito ang mga sumusunod na bahagi ng nilalaman:







Ano ang 'node-fetch'?

Ang ' node-fetch ” ay tumutugma sa isang magaan na module na ginagawang naa-access ang fetch API sa node.js. Ang modyul na ito ay nagpapahintulot din sa mga gumagamit na gamitin ang ' kunin() ” method sa node.js na halos kapareho ng JavaScript “ window.fetch() ” paraan.



Syntax(fetch() Method)



sunduin ( url [ , mga pagpipilian ] ) ;

Sa syntax na ito:





  • url ” ay tumutukoy sa URL ng mapagkukunan na kailangang kunin/bawiin.
  • Ang ' mga pagpipilian 'Ang parameter ay kailangan kapag may pangangailangang gamitin ang 'fetch()' na paraan maliban sa paggawa ng ' GET ' hiling.

Ibalik ang Halaga

Kinukuha ng function na ito ang object na Response na naglalaman ng impormasyon tungkol sa isang tugon ng HTTP tulad ng sumusunod:



  • text: Kinukuha ang katawan ng tugon sa anyo ng isang string.
  • mga header: Nagbabalik ng isang bagay na binubuo ng mga humahawak ng tugon.
  • json(): Pino-parse ang body ng tugon sa isang JSON object.
  • statustext/status: Binubuo ang impormasyon tungkol sa HTTP status code.
  • ok: Nagbibigay ' totoo ” kung ang status ay isang 2xx status code.

Mga kinakailangan para sa Paggamit ng node-fetch

Ang mga sumusunod ay ang mga kinakailangan na dapat isaalang-alang bago magsimula sa ' node-fetch ”:

  • Naka-install ng hindi bababa sa o ang pinakabago kaysa sa 17.5 na bersyon.
  • Pangunahing kaalaman sa JavaScript.

Paano Gumawa ng Mga Kahilingan sa HTTP sa node.js gamit ang node-fetch?

Ang paggawa ng mga kahilingan sa HTTP ay isang asynchronous na pamamaraan dahil ang pagtanggap ng hiniling na tugon ay tumatagal ng ilang oras. Ito ay tulad na maaaring mayroong dalawang mga pamamaraan para sa paggamit ng mga asynchronous na pamamaraan. Ang una ay maaaring maghintay ang user para sa tugon at pagkatapos ay ipagpatuloy ang code. Ang isa ay nagpapatupad ng code nang magkatulad.

Paano Magsimula sa node-fetch?

Bago magsimula sa o i-install ang ' node-fetch ” module, magpasimula ng isang node project sa tulong ng ibinigay na command sa ibaba:

npm init - at

Ang pagpapatupad ng utos na ito ay lumilikha ng ' package.json ” file sa kasalukuyang direktoryo, tulad ng sumusunod:

Ngayon, i-install ang ' node-fetch ” module gamit ang sumusunod na cmdlet:

npm install node - sunduin

Gayunpaman, upang mag-install ng bersyon ng target na module, gamitin ang sumusunod na command:

npm install node - sunduin @ 2.0

Sa kasong ito, ang ' 2.0 ” na bersyon ng module ay mai-install.

Tandaan: Bago magpatuloy sa mga halimbawa, lumikha ng ' index.mjs ” file sa workspace na gagamitin para ilapat ang mga functionality.

Halimbawa 1: Ipadala ang Kumuha ng Mga Kahilingan Sa pamamagitan ng node-fetch

Ang ' node-fetch ” module ay maaaring gamitin upang makakuha ng teksto mula sa isang web server o ang data sa pamamagitan ng Rest API.

Ang halimbawa ng code sa ibaba na nakasulat sa nilikha na ' index.mjs ” file ay gumagawa ng isang simpleng Kumuha ng kahilingan sa homepage ng YouTube:

angkat sunduin mula sa 'node-fetch' ;

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

. pagkatapos ( res => res. text ( ) )

. pagkatapos ( text => console. log ( text ) ) ;

Sa mga linyang ito ng code:

  • I-load ang ' node-fetch ” module at kunin ang homepage ng YouTube sa pamamagitan ng tinukoy na URL kung saan ginawa ang kahilingan sa HTTP.
  • Pagkatapos nito, i-chain ang “ pagkatapos () ” mga paraan upang mahawakan ang tugon at data mula sa ginawang kahilingan.
  • Ang dating 'then()' na paraan ay nagpapahiwatig ng paghihintay para makuha ang tugon mula sa YouTube server at ibahin ito sa text format.
  • Ang huling 'then()' na paraan ay nagpapahiwatig ng paghihintay para sa resulta ng nakaraang pagbabago at ipinapakita ito sa console.

Output

Ngayon, isagawa ang code sa pamamagitan ng sumusunod na cmdlet:

index ng node. mjs

Ang pagpapatupad ng command sa itaas ay nagreresulta sa pagkuha ng buong HTML markup ng homepage ng YouTube na ipinapakita sa console:

Halimbawa 2: Kunin ang JSON Data Mula sa Rest API

Ang halimbawang ito ay gumagamit ng ' node-fetch ” para makakuha ng pekeng data sa pamamagitan ng JSONPlaceholder RestAPI. Ito ay tulad na ang ' kunin() ” na pamamaraan ay binubuo ng URL ng server at naghihintay ng tugon:

angkat sunduin mula sa 'node-fetch' ;

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

. pagkatapos ( res => res. json ( ) )

. pagkatapos ( json => {

console. log ( 'Unang Array User -> ' ) ;

console. log ( json [ 0 ] ) ;

console. log ( 'Unang Array User Name -> ' ) ;

console. log ( json [ 0 ] . pangalan ) ;

} )

Ayon sa block ng code na ito, gawin ang mga sumusunod na hakbang:

  • Binubuo ng HTTPS body ang naka-format na data ng JSON na mayroong data ng user.
  • Pagkatapos nito, ang ' json() Ang function na ” ay inilapat upang i-invoke ang mga indibidwal na entry at ang kaukulang mga halaga.

Output

Ilapat ang nakasaad sa ibaba na cmdlet upang maisagawa ang code:

index ng node. mjs

Halimbawa 3: Mag-post ng Mga Kahilingan Sa pamamagitan ng node-fetch

Ang ' node-fetch ” Magagamit din ang module para i-post ang mga kahilingan sa halip na kunin ang mga ito. Ito ay maaaring makamit sa pamamagitan ng ' kunin() ” na paraan na may kasamang karagdagang parameter upang gumawa ng mga kahilingan sa POST sa isang server.

Mayroong maraming mga opsyon na maaaring ilaan sa parameter na ito. Gayunpaman, sa kasong ito, ang ' paraan ',' katawan 'at' mga header ” ang gagamitin. Ang sumusunod ay ang paglalarawan ng bawat isa sa mga opsyon:

  • Ang ' paraan Ang pagpipiliang ” ay nagtatakda ng uri ng mga kahilingan sa HTTP i.e., “POST” sa sitwasyong ito.
  • Ang ' katawan Binubuo ng opsyon ang katawan ng kahilingan.
  • Ang ' header 'Ang opsyon ay naglalaman ng lahat ng kinakailangang mga header ibig sabihin, ' Uri ng Nilalaman ” sa ganitong senaryo.

Ngayon, magpatuloy sa praktikal na pagpapatupad ng pagpapadala ng mga kahilingan sa post sa pamamagitan ng pagdaragdag ng bagong item sa JSON placeholder ' lahat ”. Ginagawa ito sa pamamagitan ng pagdaragdag ng bagong item sa listahan na mayroong userID bilang '476':

angkat sunduin mula sa 'node-fetch' ;

hayaan ang lahat = {

userId : 476 ,

lugar : 'Ito ang Linuxhint' ,

nakumpleto : mali

} ;

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

paraan : 'POST' ,

katawan : JSON. higpitan ( lahat ) ,

mga header : { 'Uri ng Nilalaman' : 'application/json' }

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

. pagkatapos ( json => console. log ( json ) ) ;

Sa code na ito:

  • Una sa lahat, gumawa ng todo object at ibahin ito sa JSON habang idinadagdag ito sa katawan.
  • Ngayon, gayundin, tukuyin ang URL na may mga kinakailangang opsyon bilang ' kunin() ” mga opsyonal na parameter ng pamamaraan.
  • Pagkatapos nito, ilapat ang ' JSON.stringify() ” na paraan upang i-transform ang object sa isang format na (JSON) string bago ipadala/i-transmit ito sa web server.
  • Sa pagpapatuloy, ipatupad ang pinagsamang ' pagkatapos () ” na paraan upang makuha ang data sa pamamagitan ng paghihintay sa tugon, pagpapalit nito sa JSON, at pag-log sa console, ayon sa pagkakabanggit.

Output

Isagawa ang utos na ibinigay sa ibaba upang maisagawa ang code:

index ng node. mjs

Ano ang HTTP Status Codes?

Bago magpatuloy sa susunod na halimbawa, tiyaking kung ang tugon ay binubuo ng ' 3xx ” status code, ang mga karagdagang hakbang ay kailangang gawin ng kliyente. Gayundin, ang ' 4xx Ang mga code ay kumakatawan sa isang di-wastong kahilingan at ang ' 5xx ” ang mga code ay tumutugma sa mga error sa server.

Tandaan: Ang ' catch() ” function ay hindi makayanan ang mga kaso na tinalakay sa itaas dahil ang komunikasyon ng server ay sumasailalim sa isang streamlined na paraan. Samakatuwid, ang isang epektibong diskarte upang matiyak na ang mga nabigong kahilingan ay nagbabalik ng error ay upang tukuyin ang isang function na sinusuri ang status ng HTTP ng tugon ng server.

Halimbawa 4: Pagharap sa Mga Pagbubukod at Limitasyon

Maaaring may ilang limitasyon o eksepsiyon sa mga ipinadalang kahilingan i.e., mga isyu sa Internet, ' kunin() ” mga limitasyon sa function, atbp. Ang mga pagbubukod na ito ay maaaring pangasiwaan sa pamamagitan ng pagdaragdag ng “ catch() ” function:

function analysisStatus ( x ) {

kung ( x. ok ) {

bumalik x

} iba pa {

itapon bago Error ( `Katayuan ng HTTP na may kinalaman sa tugon -> $ { x. katayuan } ( $ { x. statusText } ) ` ) ;

}

}

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

. pagkatapos ( analysisStatus )

. pagkatapos ( x => x. json ( ) )

. pagkatapos ( json => console. log ( json ) )

. mahuli ( magkamali => console. log ( magkamali ) ) ;

Sa snippet na ito ng code:

  • Una, tukuyin ang isang function na may nakasaad na parameter bago i-parse ang tugon upang makayanan ang mga nahaharap na limitasyon.
  • Ngayon, isama ang ' kung hindi ” mga pahayag upang itapon ang nahaharap na error o isang custom na limitasyon.
  • Pagkatapos nito, sa katulad na paraan, ilapat ang ' kunin() ” na paraan at ang nauugnay na “then()” na mga paraan upang mabawi ang data sa pamamagitan ng paghihintay sa tugon, pagpapalit nito sa JSON, at pag-log in sa console.
  • Panghuli, ang mga pagbubukod sa runtime ay maaaring harapin sa pamamagitan ng paglalagay ng ' catch() ” paraan sa dulo ng kadena ng pangako.

Output

Panghuli, patakbuhin ang ibinigay na cmdlet sa ibaba upang patakbuhin ang code at itapon ang mga nakaharap na mga pagbubukod:

index ng node. mjs

Iba Pang Mga Kaso ng Paggamit ng 'node-fetch'

Ang ' node-fetch 'maaari ding gamitin para sa paggawa ng' Mga Kahilingan sa API 'o' Web Scraping ”. Talakayin natin ang mga kaso ng paggamit na ito nang detalyado.

Paggamit ng node-fetch para sa Paggawa ng Mga Kahilingan sa API

Maaaring kailanganin ang API sa ilang mga sitwasyon upang makuha ang target na data sa pamamagitan ng back-end na pinagmulan. Ang mga kahilingan sa HTTP ay maaaring magkaroon ng maraming paraan ng pagpapatotoo tulad ng paggamit ng API key kung saan nagbibigay ang API provider ng key na limitado sa user lamang. Ang isa pang diskarte upang maprotektahan ang API ay maaaring sa pamamagitan ng ' Pangunahing Pagpapatunay ” kung saan kailangang magpadala ng isang header para ma-invoke ang API.

Ang sumusunod ay ang pagpapakita ng huling diskarte i.e., 'Basic Authentication' sa post request sa tulong ng ' kunin() 'paraan:

( async ( ) => {

const x = hintayin ang sundo ( 'http://httpbin.org/post' , {

paraan : 'POST' ,

mga header : {

'Awtorisasyon' : `Basic na $ { kuya ( 'login:password' ) } `

} ,

katawan : JSON. higpitan ( {

'susi' : 'halaga'

} )

} ) ;

const resulta = maghintay x. text ( ) ;

console. log ( resulta ) ;

} ) ( ) ;

Sa pagpapakita sa itaas, isang header ang ipinadala na may ' base64 'naka-encode na string ng format' login:password ”.

Paggamit ng node-fetch para sa Web Scraping

Web Scraping ” ay tumutukoy sa pamamaraan kung saan kinukuha ang data/nilalaman mula sa mga site at na-parse. Ang pag-parse na ito ay nakamit sa pamamagitan ng ' cheerio ” aklatan.

Nasa ibaba ang pagpapakita ng pagkuha ng pamagat ng pahina sa pamamagitan ng ' kunin() 'paraan at' cheerio ” library:

const lib = nangangailangan ( 'cheer' ) ;

( async ( ) => {

const x = hintayin ang sundo ( 'https://linuxhint.com/' ) ;

const at = maghintay x. text ( ) ;

const $ = lib. load ( at ) ;

console. log ( $ ( 'title' ) . una ( ) . text ( ) ) ;

} ) ( ) ;

Kinukuha ng halimbawang ito ang tile ng ' Linux ” pamagat ng site.

Konklusyon

Ang mga kahilingan sa HTTP sa node.js ay maaaring gawin gamit ang node-fetch sa pamamagitan ng pagpapadala ng mga kahilingan sa pagkuha, pagkuha ng data ng JSON mula sa REST API, o pagpapadala ng mga kahilingan sa pag-post. Gayundin, ang mga pagbubukod at limitasyon ay maaaring pangasiwaan nang epektibo sa pamamagitan ng ' catch() ” function.