Cara Membuat Permintaan HTTP dalam Node.js dengan node-fetch

Cara Membuat Permintaan Http Dalam Node Js Dengan Node Fetch



Permintaan HTTP adalah penting dan dibuat untuk mengambil maklumat daripada URL secara global iaitu, menggunakan tapak web, dsb. Pendekatan ini berkuat kuasa apabila aplikasi web perlu mewujudkan komunikasi dengan pelayan web untuk mengakses sumber. Contohnya, mendapatkan semula atau menyiarkan data ke pelayan web atau API.

Dalam JavaScript, ia boleh dijalankan melalui ' window.fetch() ” kaedah. Walau bagaimanapun, dalam ' node.js ”, kefungsian ini boleh dicapai menggunakan berbilang pakej iaitu, pengambilan nod, dsb.

Blog ini menerangkan bidang kandungan berikut:







Apakah itu 'pengambilan nod'?

' pengambilan nod ” sepadan dengan modul ringan yang menjadikan API pengambilan boleh diakses oleh node.js. Modul ini juga membenarkan pengguna menggunakan “ ambil() ' kaedah dalam node.js yang kebanyakannya serupa dengan JavaScript ' window.fetch() ” kaedah.



Sintaks(Kaedah ambil())



ambil ( url [ , pilihan ] ) ;

Dalam sintaks ini:





  • url ” merujuk kepada URL sumber yang perlu diambil/diambil semula.
  • ' pilihan ” parameter diperlukan apabila terdapat keperluan untuk menggunakan kaedah “fetch()” selain daripada membuat “ DAPATKAN ” permintaan.

Nilai Pulangan

Fungsi ini mendapatkan semula objek Respons yang terdiri daripada maklumat mengenai respons HTTP seperti berikut:



  • teks: Mendapatkan semula badan tindak balas dalam bentuk rentetan.
  • tajuk: Mengembalikan objek yang terdiri daripada pengendali tindak balas.
  • json(): Menghuraikan badan tindak balas dalam objek JSON.
  • statustext/status: Mengandungi maklumat mengenai kod status HTTP.
  • okey: Memberi ' benar ” jika status ialah kod status 2xx.

Prasyarat untuk Menggunakan node-fetch

Berikut adalah prasyarat yang perlu dipertimbangkan sebelum memulakan dengan “ pengambilan nod ”:

  • Dipasang sekurang-kurangnya atau yang terkini daripada versi 17.5.
  • Pengetahuan asas JavaScript.

Bagaimana untuk Membuat Permintaan HTTP dalam node.js dengan node-fetch?

Membuat permintaan HTTP adalah prosedur tak segerak kerana menerima respons yang diminta mengambil sedikit masa. Oleh itu, terdapat dua metodologi untuk menggunakan prosedur tak segerak. Yang pertama ialah pengguna boleh menunggu respons dan kemudian menyambung semula dengan kod. Yang satu lagi sedang melaksanakan kod secara selari.

Bagaimana untuk Bermula dengan pengambilan nod?

Sebelum memulakan atau memasang ' pengambilan nod ”, mulakan projek nod dengan bantuan arahan yang diberikan di bawah:

npm init - dan

Melaksanakan arahan ini mencipta ' package.json ” dalam direktori semasa, seperti berikut:

Sekarang, pasang ' pengambilan nod ” modul menggunakan cmdlet berikut:

npm memasang nod - ambil

Walau bagaimanapun, untuk memasang versi modul sasaran, gunakan arahan berikut:

npm memasang nod - ambil@ 2.0

Dalam kes ini, ' 2.0 ” versi modul akan dipasang.

Catatan: Sebelum meneruskan dengan contoh, buat ' index.mjs ” fail dalam ruang kerja yang akan digunakan untuk menggunakan fungsi.

Contoh 1: Hantar Dapatkan Permintaan Melalui node-fetch

' pengambilan nod ” modul boleh digunakan untuk mendapatkan teks daripada pelayan web atau data melalui Rest API.

Contoh kod di bawah ditulis dalam ' yang dibuat index.mjs ” fail membuat permintaan Dapatkan ringkas ke halaman utama YouTube:

import ambil daripada 'pengambilan nod' ;

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

. kemudian ( semula => semula teks ( ) )

. kemudian ( teks => konsol. log ( teks ) ) ;

Dalam baris kod ini:

  • Muatkan ' pengambilan nod ” dan dapatkan semula halaman utama YouTube melalui URL yang ditentukan untuk permintaan HTTP dibuat.
  • Selepas itu, rantai “ kemudian() ” kaedah untuk mengendalikan respons dan data daripada permintaan yang dibuat.
  • Kaedah 'kemudian()' dahulu menunjukkan menunggu untuk mendapatkan respons daripada pelayan YouTube dan mengubahnya kepada format teks.
  • Kaedah 'kemudian()' yang terakhir menandakan menunggu hasil transformasi sebelumnya dan memaparkannya pada konsol.

Pengeluaran

Sekarang, laksanakan kod melalui cmdlet berikut:

indeks nod. mjs

Melaksanakan arahan di atas menghasilkan mendapatkan semula keseluruhan penanda HTML halaman utama YouTube yang dipaparkan pada konsol:

Contoh 2: Dapatkan Data JSON Dari Rest API

Contoh ini menggunakan ' pengambilan nod ” untuk mendapatkan data palsu melalui JSONPlaceholder RestAPI. Ia sedemikian rupa bahawa ' ambil() ' kaedah terdiri daripada URL pelayan dan menunggu jawapan:

import ambil daripada 'pengambilan nod' ;

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

. kemudian ( semula => semula json ( ) )

. kemudian ( json => {

konsol. log ( 'Pengguna Tatasusunan Pertama -> ' ) ;

konsol. log ( json [ 0 ] ) ;

konsol. log ( 'Nama Pengguna Tatasusunan Pertama -> ' ) ;

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

} )

Mengikut blok kod ini, lakukan langkah berikut:

  • Badan HTTPS terdiri daripada data berformat JSON yang mempunyai data pengguna.
  • Selepas itu, ' json() fungsi ” digunakan untuk memanggil masukan individu dan nilai yang sepadan.

Pengeluaran

Gunakan cmdlet yang dinyatakan di bawah untuk melaksanakan kod:

indeks nod. mjs

Contoh 3: Siarkan Permintaan Melalui node-fetch

' pengambilan nod ” modul juga boleh digunakan untuk menyiarkan permintaan dan bukannya mendapatkannya. Ini boleh dicapai melalui ' ambil() ” kaedah yang termasuk parameter tambahan untuk membuat permintaan POST kepada pelayan.

Terdapat berbilang pilihan yang boleh diperuntukkan dengan parameter ini. Walau bagaimanapun, dalam kes ini, ' kaedah ',' badan ” dan “ tajuk ' akan digunakan. Berikut ialah penerangan bagi setiap pilihan:

  • ' kaedah ” pilihan menetapkan jenis permintaan HTTP iaitu, “POST” dalam senario ini.
  • ' badan ” pilihan terdiri daripada badan permintaan.
  • ' kepala 'pilihan mengandungi semua pengepala yang diperlukan iaitu, ' Jenis kandungan ” dalam senario ini.

Sekarang, teruskan kepada pelaksanaan praktikal menghantar permintaan siaran dengan melampirkan item baharu pada pemegang tempat JSON ' semua ”. Ia dilakukan dengan menambahkan item baharu pada senarai yang mempunyai ID pengguna sebagai '476':

import ambil daripada 'pengambilan nod' ;

biarkan semuanya = {

ID Pengguna : 476 ,

tapak : 'Ini Linuxhint' ,

selesai : salah

} ;

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

kaedah : 'POST' ,

badan : JSON. merangkai ( semua ) ,

tajuk : { 'Jenis kandungan' : 'aplikasi/json' }

} ) . kemudian ( semula => semula json ( ) )

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

Dalam kod ini:

  • Pertama sekali, buat objek todo dan ubahnya kepada JSON sambil melampirkannya pada badan.
  • Sekarang, begitu juga, nyatakan URL dengan pilihan yang diperlukan sebagai ' ambil() ” parameter pilihan kaedah.
  • Selepas itu, gunakan ' JSON.stringify() ” kaedah untuk mengubah objek kepada rentetan berformat (JSON) sebelum menghantar/menghantarnya ke pelayan web.
  • Melangkah ke hadapan, laksanakan gabungan ' kemudian() ” kaedah untuk mendapatkan semula data dengan menunggu respons, menukarnya kepada JSON dan log masuk ke konsol, masing-masing.

Pengeluaran

Jalankan arahan yang disediakan di bawah untuk melaksanakan kod:

indeks nod. mjs

Apakah Kod Status HTTP?

Sebelum meneruskan ke contoh seterusnya, pastikan bahawa jika respons terdiri daripada ' 3xx ” kod status, langkah tambahan perlu diambil oleh pelanggan. Begitu juga, ' 4xx kod ' mewakili permintaan yang tidak sah dan ' 5xx ” kod sepadan dengan ralat pelayan.

Catatan: ' tangkap () ” fungsi tidak dapat menampung kes yang dibincangkan di atas kerana komunikasi pelayan berjalan dengan cara yang diperkemas. Oleh itu, pendekatan yang berkesan untuk memastikan bahawa permintaan yang gagal mengembalikan ralat adalah untuk menentukan fungsi yang menganalisis status HTTP respons pelayan.

Contoh 4: Menghadapi Pengecualian dan Had

Terdapat beberapa batasan atau pengecualian dengan permintaan yang dihantar iaitu, isu dengan Internet, ' ambil() ” had fungsi, dsb. Pengecualian ini boleh dikendalikan dengan melampirkan “ tangkap () fungsi ':

fungsi analisisStatus ( x ) {

jika ( x. okey ) {

kembali x

} lain {

melontar baru ralat ( `Status HTTP berkenaan dengan respons -> $ { x. status } ( $ { x. statusTeks } ) ` ) ;

}

}

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

. kemudian ( analisisStatus )

. kemudian ( x => x. json ( ) )

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

. tangkap ( silap => konsol. log ( silap ) ) ;

Dalam coretan kod ini:

  • Mula-mula, tentukan fungsi yang mempunyai parameter yang dinyatakan sebelum menghuraikan respons untuk mengatasi had yang dihadapi.
  • Sekarang, masukkan ' jika tidak ” kenyataan untuk membuang ralat yang dihadapi atau had tersuai.
  • Selepas itu, begitu juga, gunakan ' ambil() ” dan kaedah “then()” yang berkaitan untuk mendapatkan semula data dengan menunggu respons, menukarnya kepada JSON dan log masuk ke konsol.
  • Akhir sekali, pengecualian masa jalan boleh ditangani dengan meletakkan ' tangkap () ” kaedah di hujung rantai janji.

Pengeluaran

Akhir sekali, jalankan cmdlet yang diberikan di bawah untuk menjalankan kod dan buang pengecualian yang dihadapi:

indeks nod. mjs

Kes Penggunaan Lain 'node-fetch'

' pengambilan nod 'juga boleh digunakan untuk membuat' Permintaan API ” atau “ Mengikis Web ”. Mari bincangkan kes penggunaan ini secara terperinci.

Penggunaan pengambilan nod untuk Membuat Permintaan API

API boleh diperlukan dalam beberapa senario untuk mengambil data sasaran melalui sumber bahagian belakang. Permintaan HTTP boleh mempunyai banyak kaedah pengesahan seperti menggunakan kunci API di mana penyedia API menyediakan kunci yang terhad kepada pengguna sahaja. Pendekatan lain untuk melindungi API boleh melalui “ Pengesahan Asas ” di mana pengepala perlu dihantar untuk menggunakan API.

Berikut ialah demonstrasi pendekatan terakhir iaitu, 'Pengesahan Asas' dalam permintaan pos dengan bantuan ' ambil() ' kaedah:

( tak segerak ( ) => {

const x = tunggu ambil ( 'http://httpbin.org/post' , {

kaedah : 'POST' ,

tajuk : {

'Kebenaran' : `$ Asas { bro ( 'log masuk:kata laluan' ) } `

} ,

badan : JSON. merangkai ( {

'kunci' : 'nilai'

} )

} ) ;

const hasil = tunggu x. teks ( ) ;

konsol. log ( hasil ) ;

} ) ( ) ;

Dalam demonstrasi di atas, pengepala dihantar dengan ' asas64 ' rentetan format yang dikodkan ' log masuk:kata laluan ”.

Penggunaan nod-fetch untuk Web Scraping

Mengikis Web ” merujuk kepada teknik di mana data/kandungan diambil dari tapak dan dihuraikan. Penghuraian ini dicapai melalui ' cheerio ” perpustakaan.

Di bawah ialah demonstrasi mengambil tajuk halaman melalui ' ambil() ' kaedah dan ' cheerio ” perpustakaan:

const lib = memerlukan ( 'bersorak' ) ;

( tak segerak ( ) => {

const x = tunggu ambil ( 'https://linuxhint.com/' ) ;

const dan = tunggu x. teks ( ) ;

const $ = lib. memuatkan ( dan ) ;

konsol. log ( $ ( 'tajuk' ) . pertama ( ) . teks ( ) ) ;

} ) ( ) ;

Contoh ini mendapatkan semula jubin ' Linux ” tajuk tapak.

Kesimpulan

Permintaan HTTP dalam node.js boleh dibuat dengan pengambilan nod dengan menghantar permintaan dapatkan, mendapatkan semula data JSON daripada REST API atau menghantar permintaan pos. Selain itu, pengecualian dan batasan boleh dikendalikan dengan berkesan melalui ' tangkap () ” fungsi.