Membuat Server Web HTTP di Node.js dengan Code Example

โšก Ringkasan Cerdas

Node.js membangun server web yang berfungsi hanya dalam beberapa baris menggunakan modul http bawaan. Server mendengarkan pada port yang dipilih dan menjawab setiap permintaan dengan kode status dan isi, sementara kode terpisah mengambil data dari situs lain.

  • ๏ธ Pembuatan Server: http.createServer mendaftarkan fungsi callback yang berjalan sekali untuk setiap permintaan masuk dan menerima objek permintaan dan respons.
  • ๐Ÿ”ข Status dan Header: writeHead mengirimkan kode status dan Content-Type sebelum konten body ditulis.
  • ๐Ÿ”Œ Pengikatan Port: `server.listen` menghubungkan aplikasi ke sebuah port, dan nomor port yang tersedia dapat dipilih.
  • ๐Ÿ“ฅ Permintaan Keluar: Mengambil data dari situs lain membutuhkan klien HTTP, dan Node sekarang menyediakan fungsi pengambilan data global.
  • โš ๏ธ Klien yang sudah usang: Modul permintaan telah dihentikan penggunaannya pada Februari 2020 dan tidak boleh digunakan dalam kode baru.
  • ๏ธ Kegagalan Startup: Kesalahan EADDRINUSE berarti port yang dipilih sudah digunakan oleh proses lain.

Buat Server Web HTTP di Node.js

The Node.js Framework sebagian besar digunakan untuk membuat aplikasi berbasis server. Framework ini dapat dengan mudah digunakan untuk membangun server web yang menyajikan konten kepada pengguna.

Beberapa modul menangani permintaan terkait server, yang sudah terintegrasi. http Modul ini merupakan yang utama di antaranya. Kita akan melihat bagaimana cara membuat aplikasi server web dasar menggunakan Node.js, dan kemudian bagaimana cara meminta data dari situs lain.

Node sebagai web server menggunakan HTTP

Mari kita lihat contoh cara membuat dan menjalankan aplikasi Node.js pertama.

Aplikasi ini membuat modul server sederhana yang mendengarkan pada port 7000. Ketika permintaan dibuat melalui browser pada port tersebut, server mengirimkan Hello Dunia tanggapan kepada klien.

Node sebagai web server menggunakan HTTP

Code Penjelasan

  1. The require fungsi membaca sebuah JavaNaskah file, mengeksekusinya, dan mengembalikan objek ekspornya. Di sini ia memuat http modul tersebut sehingga fungsinya tersedia di dalam aplikasi.
  2. Aplikasi server dibuat dari sebuah fungsi sederhana. Fungsi tersebut dijalankan setiap kali sebuah permintaan mencapai server.
  3. Ketika sebuah permintaan diterima, respons akan dikirim dengan status tertentu. 200Ini adalah kode status standar dalam header HTTP untuk respons yang berhasil.
  4. Isi respons itu sendiri adalah string. Hello Dunia.
  5. server.listen Membuat aplikasi mendengarkan permintaan klien pada port 7000. Port mana pun yang tersedia dapat digunakan.

Jika perintah berhasil dijalankan, output berikut akan muncul di browser.

Keluaran

Output server web Node.js

Dari hasil keluarannya:

  • Mengakses localhost URL pada port 7000 menampilkan string Hello Dunia di halaman tersebut.
  • Karena kode tersebut menentukan port 7000, output hanya terlihat saat mengakses port tersebut.

Berikut kode untuk referensi:

var http = require('http');

var server = http.createServer(function(request, response) {
    response.writeHead(200, { "Content-Type": "text/plain" });
    response.end("Hello World\n");
});

server.listen(7000);

Menangani Permintaan GET di Node.js

Melakukan permintaan GET untuk mengambil data dari situs lain sangat mudah di Node.js. Secara historis, hal ini membutuhkan... request modul, diinstal dari baris perintah:

npm install request

Perintah tersebut meminta pengelola paket Node untuk mengunduh modul yang dibutuhkan dan menginstalnya. Setelah instalasi berhasil, baris perintah akan menampilkan nama dan versi modul yang terinstal dalam format berikut: <name>@<version>.

output permintaan instalasi npm

Pada cuplikan gambar di atas, request Modul beserta nomor versinya telah diunduh dan diinstal.

Melakukan permintaan GET di Node.js

Code Penjelasan

  1. The request Modul yang diinstal pada langkah sebelumnya menyediakan fungsi-fungsi yang dibutuhkan untuk melakukan permintaan GET ke situs web.
  2. Permintaan GET dikirim ke suatu situs, dan fungsi callback akan dijalankan setelah respons diterima. Fungsi callback menerima tiga parameter:
    1. error โ€” mencatat setiap kesalahan yang muncul saat melakukan permintaan.
    2. Response โ€” membawa header HTTP yang dikembalikan bersama respons.
    3. Body โ€” berisi seluruh isi tanggapan.
  3. Konten yang diterima di body Parameter tersebut ditulis ke konsol.

Berikut kode untuk referensi:

var request = require("request");

request("https://example.com", function(error, response, body) {
    // Always check the error parameter before using the body
    if (error) {
        console.error("Request failed:", error.message);
        return;
    }
    console.log(body);
});

โš ๏ธ Pemberitahuan penghentian penggunaan: itu request modul tersebut adalah sepenuhnya dihentikan penggunaannya pada Februari 2020. dan tidak menerima pembaruan lebih lanjut. Program ini masih terinstal dan berjalan, jadi contoh di atas tetap valid untuk proyek yang sudah ada, tetapi npm install request Sekarang menampilkan peringatan penghentian penggunaan. Kode baru harus menggunakan fungsi bawaan. fetch fungsi yang akan ditunjukkan pada bagian selanjutnya.

Cara Melakukan Permintaan HTTP dengan fetch bawaan di Node.js

Node telah menyertakan fitur global. fetch Fungsi ini sudah ada sejak versi 18, sesuai dengan API yang sudah disediakan oleh browser. Tidak diperlukan instalasi paket, dan fungsi ini mengembalikan promise, sehingga dapat bekerja langsung dengan browser. async/await.

// No require and no npm install needed on Node 18 or later

async function getData() {
    try {
        const response = await fetch("https://example.com");

        // fetch does NOT reject on 404 or 500 โ€” check ok yourself
        if (!response.ok) {
            throw new Error("HTTP status " + response.status);
        }

        const body = await response.text();
        console.log(body);

    } catch (err) {
        // Network failures and the throw above both land here
        console.error("Request failed:", err.message);
    }
}

getData();

Ada tiga perbedaan dari gaya callback yang perlu diperhatikan. Pertama, fetch hanya menolak jika terjadi kegagalan di tingkat jaringan; HTTP 404 atau 500 masih berhasil diselesaikan, itulah sebabnya response.ok Pemeriksaan ini ada dan mengapa mengabaikannya adalah kesalahan paling umum saat berpindah dari requestKedua, isi pesan tidak disampaikan bersamaan dengan respons โ€” pesan tersebut harus dibaca secara eksplisit. response.text() untuk teks biasa atau response.json() untuk JSON, dan masing-masing mengembalikan promise-nya sendiri. Ketiga, karena seluruh panggilan berbasis promise, satu try/catch Mencakup permintaan dan isi yang dibaca, menggantikan sepenuhnya parameter callback yang mengutamakan kesalahan.

Untuk skrip yang harus dijalankan pada Node 16 atau versi sebelumnya, instal node-fetch or axios Sebaliknya, karena keduanya mengekspos antarmuka berbasis promise yang sebanding dan hanya memerlukan perubahan pada baris impor setelah runtime ditingkatkan.

request vs fetch vs axios: Mana yang Harus Digunakan?

Terdapat tiga klien HTTP yang sering muncul di sebagian besar materi Node, dan hanya satu di antaranya yang merupakan pilihan default yang masuk akal untuk pekerjaan baru. Ketiganya berbeda dalam status pemeliharaan, apakah diperlukan dependensi sama sekali, dan bagaimana masing-masing memberikan sinyal status kesalahan, sehingga tabel di bawah ini membandingkan ketiganya secara berdampingan.

Aspek permintaan ambil (bawaan) aksioma
Status Tidak digunakan lagi sejak tahun 2020. Dipelihara di inti Dipelihara secara aktif
Instalasi paket npm Tidak ada di Node 18+ paket npm
Gaya Callback berbasis kesalahan pertama Janji Janji
Penguraian JSON Manual, atau opsi JSON Manual melalui response.json() secara otomatis
Ditolak dengan kode kesalahan 404 atau 500 Tidak Tidak Ya

penggunaan fetch Untuk proyek baru pada versi Node terbaru, karena tidak menambahkan dependensi dan sesuai dengan API browser yang sudah dikenal oleh pengembang. Pilih axios Ketika penanganan JSON otomatis, pencegat permintaan, atau penolakan pada status kesalahan akan menghemat kode sebenarnya. Pertahankan request hanya di dalam aplikasi lama yang sudah bergantung padanya, dan berencana untuk menggantinya.

Kesalahan Umum pada Server Node.js dan Cara Memperbaikinya

Sebagian besar kegagalan saat memulai server Node pertama kali berasal dari port, jalur, atau respons yang hilang, bukan dari kode server itu sendiri.

  • EADDRINUSE: Proses lain sudah menggunakan port tersebut. Jalankan. netstat -ano | findstr :7000 on Windows, atau lsof -i :7000 on macOS dan Linux, kemudian hentikan proses tersebut atau pilih port yang berbeda.
  • EACCES pada port rendah: Port di bawah 1024 memerlukan hak akses yang lebih tinggi. Gunakan port di atas 1024 selama pengembangan, seperti 3000 atau 7000.
  • Browser macet dan tidak pernah memuat: petugas penanganan panggilan tidak pernah menelepon response.end()Koneksi tetap terbuka hingga waktu habis, sehingga setiap jalur melalui handler harus mengakhiri respons.
  • Modul 'http' tidak ditemukan: Nama file salah eja, atau skrip dijalankan di browser dan bukan di Node. Modul inti tidak perlu diinstal.
  • Perubahan tidak muncul: Node memuat file sekali saat startup. Mulai ulang proses setelah setiap pengeditan, atau jalankan di bawah pengawas seperti node --watch server.js.

Pertanyaan Umum Demo Slot

Modul http sudah cukup untuk satu endpoint. Express menambahkan routing, middleware, dan body parsing, yang menjadi layak digunakan setelah aplikasi melayani beberapa rute.

Memerlukan https Gunakan modul sebagai gantinya dan berikan kunci dan sertifikat ke `createServer`. Dalam lingkungan produksi, proksi terbalik seperti Nginx biasanya menghentikan TLS dan meneruskan HTTP biasa ke Node.

Ya. AI Alat ini mengkonversi callback error-first menjadi async await dengan andal. Pastikan kode yang dihasilkan menambahkan pengujian response.ok, karena fetch akan menghasilkan error 404 dan pemeriksaan tersebut sering diabaikan.

Asisten AI membaca kode kesalahan dan menyebutkan penyebabnya secara langsung, membedakan konflik port dari masalah izin atau kesalahan sintaksis, yang secara signifikan mempersingkat proses coba-coba pada proyek Node pertama.

Objek permintaan berupa aliran data, jadi kumpulkan peristiwa datanya ke dalam buffer dan uraikan hasilnya pada peristiwa akhir. Express dan kerangka kerja serupa menyediakan middleware penguraian isi permintaan yang melakukan langkah ini untuk Anda.

Ringkaslah postingan ini dengan: