Menyiapkan Lingkungan Pengembangan Hapi.js dengan ServBay
Hapi.js adalah framework Node.js yang kuat dan fleksibel untuk membangun aplikasi dan API. ServBay menyediakan lingkungan pengembangan lokal yang mudah bagi pengembang Node.js, lengkap dengan runtime Node.js, berbagai database, serta fitur server web yang mudah dikonfigurasi. Artikel ini akan memandu Anda untuk membuat dan menjalankan proyek Hapi.js dalam lingkungan ServBay, serta mengatur fitur Situs di ServBay untuk mengaksesnya, sekaligus menampilkan cara terhubung ke database bawaan ServBay.
Apa itu Hapi.js?
Hapi.js dikembangkan oleh Walmart Labs sebagai framework Node.js yang kuat dan fleksibel untuk membangun aplikasi dan layanan. Framework ini terkenal karena sistem pluginnya yang canggih, pendekatan yang berbasis konfigurasi, serta fitur keamanannya yang sudah terintegrasi, sehingga developer bisa membangun aplikasi web dan API dengan performa tinggi dan mudah dipelihara.
Fitur dan Keunggulan Utama Hapi.js
- Sistem Plugin: Hapi.js dilengkapi sistem plugin yang kuat dan mudah digunakan, sehingga fungsionalitas framework bisa diperluas atau logika aplikasi bisa diorganisasi menjadi modul-modul yang dapat digunakan ulang.
- Berbasis Konfigurasi: Hapi.js mengedepankan pengembangan berbasis konfigurasi, di mana perilaku routing, validasi, cache, dan lainnya diatur melalui opsi konfigurasi yang lengkap.
- Validasi Input: Dilengkapi dengan pustaka Joi yang powerful, Hapi.js memungkinkan validasi data secara deklaratif untuk menjamin integritas dan keamanan data.
- Ekosistem yang Kaya: Memiliki komunitas aktif serta banyak plugin resmi dan pihak ketiga untuk kebutuhan umum seperti autentikasi, otorisasi, cache, log, dan lain-lain.
- Keamanan: Banyak fitur keamanan sudah terintegrasi, membantu developer menghindari ancaman web umum seperti validasi input dan kontrol CORS.
- Log & Debugging: Menyediakan lifecycle request logging dan alat debugging yang detail.
Dengan Hapi.js, developer dapat fokus pada logika bisnis, sementara framework menangani detail teknis seperti HTTP, routing, validasi, dan keamanan.
Membuat Proyek Hapi.js Menggunakan ServBay
Bagian berikut memandu Anda membuat serta menjalankan proyek Hapi.js dasar dengan lingkungan Node.js dari ServBay, ditambah akses melalui fitur Situs (reverse proxy) ServBay.
Prasyarat
Pastikan terlebih dahulu:
- Anda sudah menginstal ServBay di macOS.
- Anda telah mengaktifkan paket Node.js di aplikasi ServBay. Buka tab "Paket" di panel kontrol ServBay untuk menemukan dan mengaktifkan Node.js.
- Anda familiar dengan penggunaan terminal dasar dan npm package manager dari Node.js.
Membuat Proyek Hapi.js
Inisialisasi Direktori Proyek
Buka terminal, masuk ke direktori root situs yang disarankan ServBay
/Applications/ServBay/www
. Buat folder proyek baru (misalservbay-hapi-app
) dan masuk ke direktori tersebut:bashcd /Applications/ServBay/www mkdir servbay-hapi-app cd servbay-hapi-app
1
2
3Inisialisasi Proyek Node.js
Di dalam direktori proyek, inisialisasi proyek Node.js baru:
bashnpm init -y
1Perintah ini akan membuat file
package.json
di root proyek.Install Dependensi Hapi.js
Install pustaka inti Hapi.js:
bashnpm install @hapi/hapi
1Dependensi
@hapi/hapi
akan ditambahkan ke proyek Anda.Membuat File Masuk Aplikasi
Di root proyek, buat file bernama
server.js
dan masukkan kode berikut untuk membuat server Hapi.js sederhana:javascript'use strict'; // Aktifkan strict mode const Hapi = require('@hapi/hapi'); const init = async () => { const server = Hapi.server({ port: process.env.PORT || 3000, // Default listen di port 3000, atau dari variabel lingkungan PORT host: 'localhost' // Listen ke alamat loopback lokal }); // Definisikan rute root sederhana server.route({ method: 'GET', path: '/', handler: (request, h) => { return 'Hello from Hapi.js powered by ServBay!'; } }); // Mulai server await server.start(); console.log('Server running on %s', server.info.uri); }; // Tangani error Promise Rejection yang tidak tertangkap process.on('unhandledRejection', (err) => { console.error(err); process.exit(1); // Keluar dari proses }); // Panggil fungsi init untuk jalankan aplikasi init();
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33Kode ini akan membuat server Hapi yang mendengarkan
localhost
dengan port yang ditentukan (default 3000) dan menangani request GET di root/
.
Masuk ke Mode Pengembangan & Konfigurasi Situs di ServBay
Selama pengembangan, Anda bisa langsung menjalankan aplikasi Node.js dan memanfaatkan fitur reverse proxy ServBay untuk memetakannya ke domain kustom, sehingga bisa diakses lewat browser lengkap dengan sertifikat SSL dari ServBay.
Jalankan Server Pengembangan Hapi.js
Pastikan Anda berada di direktori
servbay-hapi-app
, lalu jalankan server dengan perintah berikut agar port cocok dengan reverse proxy ServBay, misalnya pakai port8585
:bashPORT=8585 node server.js
1Server akan berjalan dan menampilkan URI, misal
Server running on http://localhost:8585
. Biarkan terminal tetap terbuka agar server tetap berjalan.Konfigurasi Situs di ServBay (Reverse Proxy)
Buka aplikasi ServBay. Masuk ke tab "Situs", lalu klik tombol "+" di kiri bawah untuk menambah situs baru.
- Nama:
ServBay Hapi Dev
(bebas, untuk identifikasi di daftar ServBay) - Domain:
servbay-hapi-dev.servbay.demo
(disarankan gunakan.servbay.demo
untuk menghindari konflik domain asli dan memanfaatkan sertifikat CA ServBay) - Tipe Situs: Pilih
Reverse Proxy
- Proxy ke:
- Protokol:
http
- IP Address:
127.0.0.1
(karena server Node.js berjalan lokal) - Port:
8585
(harus sama dengan PORT yang Anda gunakan saat menjalankannode server.js
)
- Protokol:
Klik "Tambah" untuk memproses. ServBay akan otomatis mengkonfigurasi web server (seperti Caddy/Nginx) agar permintaan ke
https://servbay-hapi-dev.servbay.demo
diteruskan kehttp://127.0.0.1:8585
, serta membuat dan mempercayai sertifikat SSL untuk domain.servbay.demo
(lewat User CA ServBay). Anda dapat mengakses lewat HTTPS secara aman di lokal.Untuk langkah lebih detail tentang pengaturan situs ServBay, lihat Dokumentasi Konfigurasi Situs ServBay.
- Nama:
Akses Aplikasi Hapi.js dalam Pengembangan
Buka browser dan kunjungi domain yang sudah diatur:
https://servbay-hapi-dev.servbay.demo
. Anda seharusnya melihat tampilan "Hello from Hapi.js powered by ServBay!".Setiap perubahan pada file
server.js
(biasanya dikombinasikan dengan alat seperti nodemon untuk hot reload) akan langsung terlihat di browser melalui reverse proxy ServBay.
Contoh Penerapan untuk Lingkungan Produksi
Untuk produksi, Anda mungkin membutuhkan manajemen proses lebih stabil (seperti PM2) dan pengaturan berbeda. Berikut contoh sederhana untuk menjalankan server di port lain dan reverse proxy via ServBay:
Jalankan Server Hapi.js untuk Produksi
Jalankan aplikasi menggunakan port berbeda (misal
8586
) dan lingkungan produksi:bashPORT=8586 NODE_ENV=production node server.js
1(Catatan: Di lingkungan produksi yang nyata, gunakan PM2 atau alat manajemen lain untuk stabilitas dan pengelolaan otomatis. ServBay juga mendukung integrasi PM2.)
Konfigurasi Situs Produksi di ServBay (Reverse Proxy)
Di tab "Situs" aplikasi ServBay, klik lagi "+" untuk menambah situs baru:
- Nama:
ServBay Hapi Prod
- Domain:
servbay-hapi-prod.servbay.demo
- Tipe Situs:
Reverse Proxy
- Proxy ke:
- Protokol:
http
- IP Address:
127.0.0.1
- Port:
8586
- Protokol:
Klik "Tambah".
- Nama:
Akses Aplikasi Hapi.js Produksi
Buka browser dan kunjungi
https://servbay-hapi-prod.servbay.demo
. Anda akan melihat tampilan sama (kecuali aplikasi bertingkah beda karenaNODE_ENV
), tetapi kini berjalan pada port dan konfigurasi produksi.
Melalui fitur Situs ServBay, Anda bisa dengan mudah mengelola banyak domain lingkungan lokal ataupun produksi, dan memetakannya ke berbagai instance aplikasi Hapi.js (atau Node.js) yang berjalan di port berbeda.
Koneksi ke Database ServBay
ServBay telah terintegrasi dan mendukung beberapa sistem database populer, termasuk MySQL, MariaDB, PostgreSQL, MongoDB, dan Redis. Berikut cara menghubungkan aplikasi Hapi.js Anda ke database tersebut.
Penting: Pastikan Anda sudah mengaktifkan paket database yang dibutuhkan di tab "Paket" aplikasi ServBay, dan layanan database sudah berjalan. Status layanan bisa dicek di panel kontrol ServBay.
Default user dan password database di ServBay:
- MySQL/MariaDB: Username
root
, passwordpassword
- PostgreSQL: Username
user
, passwordpassword
- MongoDB: Tidak perlu autentikasi (default)
- Redis: Tidak perlu autentikasi (default)
Catatan: Demi keamanan, sangat disarankan untuk mengubah password database default ServBay terutama untuk penggunaan non-lokal. Anda bisa dengan mudah reset password root MySQL, MariaDB, dan PostgreSQL lewat fitur ServBay. Lihat Dokumentasi Reset Password Database untuk detailnya.
Berikut contoh kode koneksi untuk tiap database (install library terkait dengan npm).
Koneksi ke MySQL
Install library MySQL:
bashnpm install mysql2 # atau mysql
1Contoh kode koneksi (menggunakan
mysql2
):javascriptconst mysql = require('mysql2'); const connection = mysql.createConnection({ host: 'localhost', user: 'root', // Username default ServBay password: 'password', // Password default ServBay database: 'servbay_hapi_app' // Ganti dengan nama database Anda }); connection.connect(err => { if (err) { console.error('Error connecting to MySQL: ' + err.stack); return; } console.log('Connected to MySQL as id ' + connection.threadId); }); // Tutup koneksi saat sudah tidak diperlukan // connection.end();
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19Koneksi ke MariaDB
Install library MariaDB:
bashnpm install mariadb
1Contoh kode koneksi:
javascriptconst mariadb = require('mariadb'); const pool = mariadb.createPool({ host: 'localhost', user: 'root', // Username default ServBay password: 'password', // Password default ServBay database: 'servbay_hapi_app', // Ganti dengan nama database Anda connectionLimit: 5 // Ukuran pool koneksi }); pool.getConnection() .then(conn => { console.log("Connected to MariaDB"); // conn.query(...) untuk melakukan query conn.release(); // Kembalikan koneksi ke pool }) .catch(err => { console.error("Not connected to MariaDB due to error: " + err); });
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18Koneksi ke PostgreSQL
Install library PostgreSQL:
bashnpm install pg
1Contoh kode koneksi:
javascriptconst { Pool } = require('pg'); const pool = new Pool({ user: 'user', // Username default ServBay host: 'localhost', database: 'servbay_hapi_app', // Ganti dengan nama database Anda password: 'password', // Password default ServBay port: 5432, // Port default PostgreSQL }); pool.connect((err, client, done) => { if (err) { console.error('Error connecting to PostgreSQL: ', err); return; } console.log('Connected to PostgreSQL'); client.query('SELECT NOW()', (err, res) => { done(); // Bebaskan koneksi dari pool if (err) { console.error('Error executing query', err.stack); } else { console.log('PostgreSQL current time:', res.rows[0].now); } }); }); // Pool koneksi akan tertutup otomatis saat aplikasi keluar // pool.end();
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27Koneksi ke MongoDB
Install library MongoDB:
bashnpm install mongoose # atau mongodb
1Contoh kode koneksi (dengan
mongoose
):javascriptconst mongoose = require('mongoose'); mongoose.connect('mongodb://localhost/servbay-hapi-app', { useNewUrlParser: true, useUnifiedTopology: true, // MongoDB default ServBay tidak butuh autentikasi; jika mengaktifkan autentikasi, tambahkan authSource, user, pass // authSource: 'admin', // user: 'your_username', // pass: 'your_password', }) .then(() => console.log('MongoDB connected')) .catch(err => console.error('MongoDB connection error:', err)); // Koneksi mongoose tetap aktif sepanjang siklus hidup aplikasi // Untuk putuskan koneksi: mongoose.connection.close();
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15Koneksi ke Redis
Install library Redis:
bashnpm install redis
1Contoh kode koneksi:
javascriptconst redis = require('redis'); // Default: host 'localhost', port 6379 const client = redis.createClient(); client.on('error', function (err) { console.error('Redis Error: ' + err); }); client.on('connect', function () { console.log('Redis client connected'); }); // Koneksi ke server Redis client.connect(); // Untuk redis v4+ harus panggil connect() // Contoh: set dan get key // async function exampleRedisUsage() { // await client.set('mykey', 'myvalue'); // const value = await client.get('mykey'); // console.log('Value from Redis:', value); // await client.del('mykey'); // } // exampleRedisUsage(); // Tutup koneksi saat aplikasi keluar // client.quit();
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Integrasikan kode koneksi ini ke aplikasi Hapi.js Anda untuk memanfaatkan layanan database yang disediakan ServBay di lingkungan lokal.
Kesimpulan
Dengan ServBay, menyiapkan lingkungan pengembangan Hapi.js di macOS menjadi sangat efisien. ServBay menawarkan solusi lengkap: pengelolaan runtime Node.js yang mudah, berbagai database siap pakai, serta fitur Situs (reverse proxy dan SSL otomatis) yang memudahkan pengaturan akses lokal. Ikuti langkah-langkah di atas untuk langsung memulai proyek Hapi.js Anda dan rasakan kemudahan serta kekuatan fitur-fitur ServBay dalam mempercepat workflow pengembangan Anda.