Halo, Habr! Saya mempersembahkan kepada Anda terjemahan artikel
“Membuat API REST: Dasar-Dasar Server Web” .
Bagian 1. Membuat API REST: Dasar-Dasar Server Web
Server web adalah salah satu komponen terpenting dari REST API. Dalam posting ini, Anda akan memulai proyek REST API Anda dengan membuat beberapa direktori dan file awal. Kemudian Anda akan membuat modul server web dan memasangnya sehingga server web dimulai dan dimatikan dengan benar.
Kode dalam proyek ini akan diatur menggunakan struktur direktori umum, yang dapat disesuaikan dan dibangun dari waktu ke waktu sesuai kebutuhan.
cd ~ mkdir hr_app cd hr_app/ touch index.js mkdir config touch config/web-server.js mkdir controllers mkdir db_apis mkdir services touch services/web-server.js
File index.js dapat dianggap sebagai file "utama" dalam aplikasi. Ini akan menjadi titik masuk ke aplikasi. Kami akan menambahkan kode ke file ini dan file web-server.js di direktori config dan layanan.
Rekatkan kode berikut ke dalam file
Home> hr_app> config> web-server.js module.exports = { port: process.env.HTTP_PORT || 3000 };
Di Node.js, objek proses memiliki properti env yang berisi lingkungan pengguna. Saya menggunakan ini untuk mengatur nilai port ke nilai variabel lingkungan HTTP_PORT. Jika variabel lingkungan ini tidak ditentukan, nilai default adalah 3000.
Rekatkan kode berikut ke dalam
Beranda> hr_app> layanan> file web-server.js const http = require('http'); const express = require('express'); const webServerConfig = require('../config/web-server.js'); let httpServer; function initialize() { return new Promise((resolve, reject) => { const app = express(); httpServer = http.createServer(app); app.get('/', (req, res) => { res.end('Hello World!'); }); httpServer.listen(webServerConfig.port) .on('listening', () => { console.log(`Web server listening on localhost:${webServerConfig.port}`); resolve(); }) .on('error', err => { reject(err); }); }); } module.exports.initialize = initialize;
Baris 1-3: Diperlukan beberapa modul. Modul http termasuk dalam Node.js, tetapi modul Express perlu diinstal melalui npm.
Baris 7-27: Sebuah fungsi bernama inisialisasi dinyatakan. Fungsi segera mengembalikan janji, yang diizinkan atau ditolak tergantung pada apakah server web berhasil diluncurkan.
Baris 9-10: Aplikasi ekspres baru dibuat (yang sebenarnya hanya fungsi) dan kemudian digunakan untuk membuat server http melalui modul http.
Baris 12-14: Metode get aplikasi digunakan untuk menambahkan handler untuk permintaan GET yang tiba di jalur root (/). Fungsi panggilan balik akan dipanggil setelah menerima permintaan seperti itu, dan itu akan menggunakan parameter "res" (res) untuk mengirim respons "Hello World!" Kepada pelanggan.
Baris 16-24: Metode mendengarkan server digunakan untuk mengikat port yang ditentukan dan mulai mendengarkan permintaan yang masuk.
Baris 28: mengekspor modul sehingga dapat digunakan secara eksternal
Rekatkan kode berikut ke dalam file
Beranda> hr_app> index.js const webServer = require('./services/web-server.js'); async function startup() { console.log('Starting application'); try { console.log('Initializing web server module'); await webServer.initialize(); } catch (err) { console.error(err); process.exit(1);
Kami menghubungkan modul server web, dan kemudian menentukan dan memanggil fungsi startup asinkron. Karena fungsi inisialisasi server web mengembalikan janji, Anda dapat menggunakannya dengan async / menunggu dan membungkusnya dalam blok coba-tangkap. Jika fungsi inisialisasi berhasil, server web akan berfungsi; jika tidak, pengecualian apa pun akan ditangkap dan diproses. Yang harus Anda lakukan sekarang adalah menginisialisasi npm dan menginstal Express - maka Anda dapat memulai aplikasi. Jalankan perintah berikut di terminal dari direktori hr_app.
npm init -y npm install express -s node .
Perintah npm init digunakan untuk membuat file package.json, yang digunakan npm sebagai file manifes (flag -y menerima opsi default). Perintah install npm digunakan untuk menginstal express (flag -s menambahkan express ke daftar dependensi di package.json). Npm menyimpan modul yang Anda instal di direktori node_modules. Dia juga membuat file bernama package.lock.json untuk menyediakan pohon yang identik untuk tim pengembangan.
Apakah Anda melihat pesan
server Web mendengarkan di localhost: 3000? Selamat, Anda telah membuat server ekspres berdasarkan!
Dan ini dia, "Hello World" yang lain. Meskipun tidak terlalu menyenangkan, ini adalah langkah pertama yang penting untuk API Anda.
Ketika Anda siap, Anda dapat mematikan server dengan kembali ke terminal dan menekan ctrl + c.

Pematian terkendali
Selama shutdown dengan menekan Ctrl + C, Anda tidak memiliki kendali atas bagaimana ini terjadi. Untuk mengontrol proses shutdown, Anda perlu menutup server web secara eksplisit dan keluar dari proses Node.js.
Rekatkan kode berikut ke dalam
Beranda> hr_app> layanan> file web-server.js
Fungsi tutup mengembalikan janji yang diselesaikan ketika server web berhasil ditutup. Metode httpServer.close menghentikan pembuatan koneksi baru, tetapi tidak memaksa untuk menutup koneksi yang sudah terbuka. Tergantung pada berapa banyak koneksi yang terbuka dan apa yang mereka lakukan, Anda mungkin perlu menunggu sedikit sampai panggilan balik berfungsi. Meskipun Anda tidak akan melakukan ini dalam modul ini, Anda dapat menggunakan kode khusus atau modul npm seperti http-shutdown untuk memaksa koneksi terbuka ditutup.
Rekatkan kode berikut ke dalam file
Beranda> hr_app> index.js
Acara SIGINT dan SIGTERM berhubungan dengan sinyal yang dapat dikirim ke proses untuk mematikannya, misalnya, ketika ctrl + c ditekan. Peristiwa uncaughtException akan terjadi ketika kesalahan JavaScript dilemparkan, tetapi tidak ditangkap, dan ditangani menggunakan pernyataan coba-tangkap. Coba mulai dan tutup aplikasi lagi. Anda akan mengetahui bahwa semuanya berfungsi dengan benar ketika Anda melihat pesan "shutdown" di terminal.
Registrasi di server
Ada satu hal lagi yang melengkapi modul server web kami: HTTP logging. Ada berbagai modul yang dapat Anda gunakan untuk jenis login ini, tetapi morgan adalah salah satu yang sederhana. Mari kita instal morgan menggunakan npm.
npm install morgan -s
Kemudian tambahkan baris berikut ke layanan / web-server.js di bawah baris yang membutuhkan express (baris 2):
const morgan = require('morgan');
Sekarang Anda dapat mengaktifkan fungsi morgan sebagai middleware di mana semua permintaan akan diproses menggunakan app.use. Tambahkan baris ini sebelum memanggil app.get, yang menampilkan pesan "hello world".
Perhatikan bahwa app.use membuat saluran fungsi middleware yang dapat berinteraksi dengan permintaan dan respons HTTP. Fungsi middleware akan dieksekusi sesuai urutan diaktifkannya. Mulai ulang aplikasi dan instal terminal sehingga Anda dapat melihatnya dan browser pada saat yang sama. Setiap kali Anda memuat ulang halaman, Anda akan melihat entri log baru muncul di terminal. Secara default, morgan meneruskan informasi log ke STDOUT (yang ditampilkan di terminal).
Artikel berikut akan membahas dasar-dasar bekerja dengan database, termasuk kumpulan koneksi, yang akan membantu Anda memahami dan membangun REST API untuk Node.js.