Pengantar NodeJs

nodejs
javascript
server
Pengantar NodeJs cover image

Perkenalan

Saat mencoba belajar tentang web

pengembangan, kami biasanya menemukan bahwa front-end jauh lebih mudah diakses daripada back-end. Ada banyak alasan untuk hal ini, terutama perasaan mendapat umpan balik instan yang datang dari perubahan elemen tertentu pada halaman dalam kode, dan memperhatikan perubahan yang diterapkan pada situs web. Umpan balik ini sering kali berguna bagi pemula, karena memungkinkan mereka menyesuaikan kode dan belajar dari kesalahan mereka. Sayangnya, tidak demikian halnya dengan backend: seringkali, sejumlah besar pekerjaan didedikasikan untuk menyiapkan lingkungan terlebih dahulu, dan menginstal dependensi yang diperlukan agar pesan sederhana “Hello World” muncul di terminal. Untungnya, banyak kemajuan yang terus-menerus dicapai dalam komunitas sumber terbuka dalam memfasilitasi proses pengembangan kerangka kerja, dan meningkatkan pengalaman pengembang. NodeJs adalah contoh bagusnya. Kerangka kerja ini adalah teknologi yang sangat mumpuni yang menjadikan penulisan di sisi server kode dalam Javascript nyaman, dan menawarkan berbagai alat dan fitur bawaan yang membedakannya dari pesaingnya. Pada artikel ini, kita akan menjelajahi NodeJ dan ekosistemnya, dengan pendekatan langsung, membangun proyek yang berfungsi penuh.

Apa yang akan kita bangun?

Aplikasi ToDo adalah proyek masuk bagi pemula yang mempelajari pengembangan front-end. Inilah sebabnya kami memutuskan untuk membuat API daftar Todo. Ini akan memungkinkan kita untuk menambahkan persistensi data ke antarmuka kita, dan memberi kita kemampuan untuk memanipulasi data ini (dengan menambahkan, memperbarui, menghapus tugas, dll….).

Kode terakhir dapat ditemukan di sini.

Alat kami

Kami akan menggunakan tumpukan teknologi yang disederhanakan untuk proyek ini. Ini dapat dianggap sebagai versi minimal dari banyak alat yang akan Anda temukan dalam proyek kehidupan nyata, alasannya karena ide-ide tingkat tinggi adalah sama. Detail penerapan dan pemilihan alat tertentu dibandingkan alat lainnya tidaklah penting untuk memulai.

  • NodeJs, seperti yang kami sebutkan adalah salah satu kerangka Javascript paling populer untuk membangun aplikasi sisi server.

  • ExpressJs adalah kerangka Javascript minimal yang digunakan di atas NodeJS. Ini mempercepat proses pengembangan dengan menggunakan banyak fitur bawaan. Ini juga digunakan sebagai cara untuk menstandardisasi praktik pengembangan dalam proyek NodeJS untuk memfasilitasi penggunaannya bagi para insinyur.

  • LowDB adalah database dalam memori yang sederhana. Kesederhanaannya memungkinkan kami menunjukkan cara berinteraksi dengan database dalam proyek NodeJs, tanpa berurusan dengan subjek lebih lanjut seperti penerapan dan konfigurasi.

Sekarang setelah kita mengidentifikasi semua alat yang akan kita gunakan, mari beralih ke keyboard dan mulai membuat kode!

Instalasi

Node tersedia di semua platform. Semua panduan instalasi dapat ditemukan di situs web resmi. Pengguna Windows harus memastikan untuk menambahkan node jalur ke variabel lingkungan sehingga dapat digunakan pada baris perintah.

Kami juga perlu menginstal npm. Npm adalah manajer paket standar untuk NodeJs. Ini akan memungkinkan kita untuk mengelola ketergantungan proyek kita. Panduan instalasi dapat ditemukan di sini.

Inisialisasi proyek

Buka tautan dan klon proyek awal:

Ini adalah repositori pemula sederhana untuk proyek kami. Ini berisi semua dependensi yang akan kita gunakan bersama dengan struktur file proyek. Kami akan menjelaskan setiap elemen setelah tercapai. Buka terminal Anda, navigasikan ke jalur proyek dan jalankan perintah:

npm install

Ini akan menginstal semua dependensi proyek yang ditentukan dalam file package.json. package.json adalah file yang ditemukan di root proyek Javascript/NodeJs apa pun, berisi metadata tentang proyek Javascript/NodeJs dan digunakan untuk mengelola semua dependensi, skrip, dan versi proyek.

Setelah semua dependensi terinstal, kita dapat memulai aplikasi kita:

npm run start

"mulai" adalah skrip yang kami tentukan dalam paket. berkas json. Ini menentukan file entri ke aplikasi kita, yang dalam kasus kita adalah app.js.

Pesan berikut sekarang akan muncul di terminal Anda:

nodejs_1

Ini berarti server kita berhasil memulai, dan mendengarkan setiap permintaan yang dikirim ke port 3000. Mari kita lihat app.js dan jelaskan apa yang terjadi di sini:

nodejs_2

App.js adalah file entri proyek kami (dan satu-satunya saat ini). Kami membuat instance aplikasi ekspres bernama app, menentukan bahwa semua permintaan yang memiliki metode http "GET" dan subjalur '/' akan ditangani oleh rute ini, meneruskan fungsi yang disebut middleware, yang mengambil objek permintaan dan respons sebagai parameter. Hal ini penting, karena permintaan berisi semua informasi yang diperlukan untuk menanganinya (parameter, isi permintaan, header permintaan, dll.), dan objek respons adalah objek yang akan dikembalikan ke klien. Kita mulai dengan mengirimkan pesan “Halo dunia”. Setelah itu kita membuat aplikasi kita mendengarkan setiap permintaan masuk ke port yang ditentukan (dalam kasus kita 3000), dan mencatat pesan “Mendengarkan port 3000” untuk menunjukkan bahwa aplikasi kita sudah aktif dan berjalan serta siap menerima permintaan.

Buka terminal Anda dan di bilah tautan ketik “localhost:3000/”, dan tekan Enter. Ini adalah jalur tertentu yang dapat kita gunakan untuk menjangkau server kita secara lokal. Anda akan menerima pesan berikut:

nodejs_3

Konfigurasi basis data

Lowdb adalah database sumber terbuka yang mudah digunakan, dan tidak memerlukan pengaturan khusus. Ide umum di baliknya adalah untuk menyimpan semua data dalam file json lokal. Setelah LowDB terinstal (yang telah dilakukan saat kita menginstal semua dependensi), kita dapat menambahkan kode berikut ke db.js:

nodejs_4

Kode ini sangat mirip dengan yang ditemukan pada dokumentasi resmi LowDB. Kami mengubahnya sedikit untuk kasus penggunaan kami sendiri. Mari kita jelaskan baris demi baris:

Beberapa baris pertama adalah untuk mengimpor dependensi yang diperlukan. "join" adalah fungsi utilitas yang tersedia di modul "path". Ini adalah salah satu modul inti NodeJs yang menawarkan banyak metode untuk menangani dan menangani jalur. “Low” dan “JSONFile'' adalah dua kelas yang diekspos oleh LowDB. Yang pertama membuat instance file json yang akan berisi data kita. Yang kedua membuat instance database aktual yang akan menindaklanjutinya. Terakhir, “lodash” adalah salah satu perpustakaan javascript yang paling banyak digunakan yang menawarkan beragam fungsi utilitas untuk tugas pemrograman umum. Kami menambahkannya ke instance database kami untuk memungkinkan kami menggunakan metode lanjutannya untuk menangani data kami.

Pertama, kita tentukan jalur untuk file db.json. Ini adalah file yang akan berisi data kita, dan diteruskan ke LowDB. Jika file tidak ditemukan di jalur yang ditentukan, LowDB akan membuatnya.

Kami kemudian meneruskan jalur file ke adaptor LowDB, dan meneruskannya ke instance database LowDB baru kami. Variabel “db” kemudian dapat digunakan untuk berkomunikasi dengan database kita. Setelah instance database dibuat, kita membaca dari file json dengan menggunakan db.read(). Ini akan menyetel kolom "data" di instance database kita sehingga kita dapat mengakses konten database. Perhatikan bahwa kita mengawali baris ini dengan “menunggu”. Hal ini untuk menentukan bahwa instruksi ini mungkin memerlukan waktu penyelesaian yang tidak diketahui, dan bahwa proses NodeJs harus menunggu eksekusinya sebelum melanjutkan dengan kode lainnya. Kami melakukan ini karena operasi pembacaan memerlukan akses memori ke file yang ditentukan, dan waktu untuk menjalankan operasi semacam ini bergantung pada spesifikasi mesin Anda.

Sekarang kita memiliki akses ke bidang data, kita menetapkannya sebagai objek yang berisi array posting kosong, atau lebih tepatnya, kita memeriksa apakah file tersebut berisi data sebelumnya dan mengatur array kosong jika tidak demikian.

Terakhir, kami mengeksekusi db.write() untuk menerapkan modifikasi yang kami buat pada data, dan mengekspor instance database sehingga dapat digunakan di file lain dalam proyek kami.

Alur kerja Permintaan/Respon Umum

Perhatikan diagram berikut:

nodejs_5

Ini menunjukkan arsitektur umum yang diterapkan di sejumlah besar aplikasi backend yang dibangun dengan NodeJs/Express. Memahami alur kerja umum di balik penanganan permintaan tidak hanya memungkinkan Anda membangun dan menyusun aplikasi NodeJs, namun juga memungkinkan Anda mentransfer konsep-konsep ini ke hampir semua tumpukan teknis pilihan Anda. Kami akan mengeksplorasi berbagai lapisan yang mengganggu proses ini, dan menjelaskan perannya:

## Lapisan Permintaan HTTP

Ini adalah lapisan pertama dalam aplikasi kita, bayangkan sebagai gateway yang menerima berbagai macam permintaan berbeda yang datang dari klien berbeda, setiap permintaan kemudian dianalisis dan diteruskan ke bagian khusus aplikasi untuk ditangani.

  • Router: di sini kami mengacu pada router Express, tetapi konsep ini dapat ditemukan di banyak kerangka backend. Router adalah cara untuk menerapkan distribusi logis dalam logika bisnis kita ke kode kita, yang berarti bahwa setiap kumpulan elemen yang memiliki fitur serupa ditangani oleh entri yang sama, dan dapat dipisahkan dari kumpulan lainnya. Keuntungannya adalah membuat setiap komponen kode independen satu sama lain, dan lebih mudah dipelihara dan diperluas. Lebih khusus lagi, dan sebagai contoh, semua permintaan yang memenuhi ketentuan jalur url bersama “/posts” akan ditangani oleh router yang sama. Tergantung pada metode http mereka (GET, POST, dll.), pengontrol yang berbeda akan digunakan.

  • Pengontrol: pengontrol menerima permintaan yang difilter dari router, menerapkan pemrosesan tambahan, dan memanggil metode layanan yang sesuai.

Lapisan Logika Bisnis

Lapisan ini unik bergantung pada kasus penggunaan spesifik aplikasi, dan logika bisnis di baliknya.

  • Layanan: Layanan adalah sekumpulan metode yang berisi logika inti aplikasi. Mereka juga berinteraksi dengan database melalui penggunaan ORMs/ODMs.).

  • Layanan pihak ketiga: banyak aplikasi modern memilih untuk mendelegasikan sebagian logika aplikasi ke layanan khusus yang dapat diakses melalui API. Layanan semacam ini dapat berupa layanan penanganan pembayaran, penyimpanan file statis, notifikasi, dan lain-lain.

  • ODM/ORM: ORM dan ODM bertindak sebagai perantara antara layanan dan database. Peran mereka adalah menyediakan abstraksi tingkat tinggi pada database yang memungkinkan pengembang menulis kode dalam bahasa pemrograman pilihan mereka, bukan bahasa database khusus, seperti SQL.

Lapisan Persistensi Data

  • Basis data: seperti yang kami sebutkan sebelumnya, hampir semua aplikasi memerlukan suatu bentuk persistensi data. Bagian ini ditangani oleh database, dan bergantung pada sifat data, logika bisnis, dan banyak pertimbangan lainnya, pilihan database tertentu dibandingkan database lain dianggap penting untuk efisiensi dan skalabilitas aplikasi.

Contoh: Menambahkan Postingan

Sekarang setelah kita memahami gagasan umum di balik arsitektur, mari kita terapkan pada contoh sederhana kita. Kami akan menerapkan fitur menambahkan posting rencana ke aplikasi kami. Mari kita asumsikan bahwa setiap posting memiliki id unik yang akan memungkinkan kita untuk mengidentifikasinya nanti di database kita, judul yang berupa string, dan urutan yang bertipe integer. Mengikuti diagram kami, kami akan mulai dengan mengimplementasikan router. Tambahkan kode berikut ke file index.js:

Starting a server in ExpressJS

Ini adalah file router kami. Kami mengimpor metode express dan “addPost” dari pengontrol kami (kami akan segera mengimplementasikannya), membuat instance router ekspres, dan mengikat metode addPost ke router kami - artinya untuk setiap permintaan yang memiliki jalur root dan http metode “POST”, metode “addPost” akan dipanggil untuk menanganinya.

Sebelum kami menerapkan metode kami di pengontrol, kami mereferensikan router baru di file app.js utama kami, dan menentukan jalurnya sebagai “/posts”: Semua rute dengan jalur yang ditentukan akan diteruskan ke router ini, sehingga dapat ditangani dengan metode pengontrol yang berbeda:

Starting a server in ExpressJS

Kami mengimpor router dan menamainya sebagai "postingan". app.use(“/posts”,..) berarti bahwa semua permintaan dengan subjalur “/posts”, apa pun metode httpnya, akan dialihkan ke router yang ditentukan.

Perubahan lain pada app.js termasuk mengimpor file konfigurasi database agar dapat dieksekusi, dan menggunakan express.json() sebagai middleware untuk memungkinkan kita mengakses objek isi permintaan.

Sekarang setelah rute kita ditetapkan, kita dapat menambahkan metode “addPost” di file controller.js:

Starting a server in ExpressJS

“addPost” adalah fungsi middleware yang mengambil parameter permintaan, objek respons, dan fungsi selanjutnya. Ketika fungsi berikutnya dipanggil, proses akan berpindah ke middleware berikutnya dalam rantai, atau mengakhiri permintaan. Dalam kode metode, kami mengekstrak judul dan urutan dari isi permintaan, dan meneruskannya sebagai parameter ke fungsi layanan “createPost”. Fungsi ini mengambil atribut postingan, membuat postingan baru, dan mengembalikannya. Setelah postingan baru dibuat, kita kembalikan ke klien beserta kode status 200, artinya permintaan berhasil. Anda mungkin memperhatikan bahwa kode kami dimasukkan ke dalam blok coba/tangkap untuk menangkap kesalahan yang tidak terduga, dan meneruskannya ke middleware berikutnya. Ini dianggap sebagai praktik terbaik untuk melampirkan middleware penanganan kesalahan ke semua router yang mengekstrak kesalahan, dan mengembalikan pesan kesalahan yang berarti ke klien.

Yang tersisa sekarang hanyalah mengimplementasikan fungsi “createPost” di service.js:

nodejs_6

Seperti yang kami sebutkan sebelumnya ketika menjelaskan berbagai lapisan arsitektur, lapisan layanan berinteraksi dengan solusi penyimpanan data melalui penggunaan ORM/ODM. Namun, dalam contoh kita, kita tidak perlu menggunakan ORM terpisah, karena Lowdb dilengkapi dengan dukungan bawaan untuk Javascript. Semua detail tentang sintaksisnya dapat ditemukan di dokumentasi.

Metode “createPost” menerima judul dan urutan sebagai parameter, dan menggunakannya untuk membuat objek postingan. Untuk id unik, kami menggunakan perpustakaan khusus yang disebut “nanoid”, yang menghasilkan rangkaian karakter unik. Kami menambahkan postingan baru ke dalam array postingan di database, dan menulis perubahan ini; postingan baru kemudian dikembalikan oleh fungsi.

Sekarang “createPost” sudah siap, fitur penambahan postingan kini telah selesai dan aktif dan berjalan. Kami mengujinya menggunakan Postman, alat populer untuk menguji API:

nodejs_7

Kami memilih “POST” sebagai metode http untuk permintaan bersama dengan jalur url yang ditentukan “localhost:3000/posts”. Kami menambahkan judul dan pesanan sebagai format json di bagian isi, dan mengirimkan permintaan. Seperti yang ditunjukkan di atas, kami menerima status 200 OK bersama dengan postingan yang baru dibuat.

Kesimpulan

Banyak konsep dan ide yang telah dieksplorasi dalam proyek ini: Kami membahas cara menginstal dan mengatur lingkungan proyek kami, mempelajari cara mengonfigurasi LowDB untuk persistensi data lokal, menjelajahi arsitektur umum aplikasi backend NodeJS/Express, dan melihat caranya menerapkannya dalam contoh sederhana. Terakhir, kami menguji aplikasi kami menggunakan Postman.

Tujuannya di sini adalah untuk memaparkan versi sederhana dari semua hal yang diperlukan untuk membangun aplikasi backend modern. Seperti yang kita lihat sebelumnya, NodeJs adalah alat canggih yang memungkinkan kita membangun API yang sederhana dan kompleks. Dikombinasikan dengan ekosistem kerangka kerja yang kaya, seperti ekspres dan sejumlah besar alat dan perpustakaan untuk hampir semua kasus penggunaan, ini adalah solusi yang sah untuk pengembangan backend modern - solusi yang kami rekomendasikan untuk dipelajari dan dikuasai.


Career Services background pattern

Layanan Karir

Contact Section background image

Mari tetap berhubungan

Code Labs Academy © 2024 Semua hak dilindungi undang-undang.