Menyediakan Persekitaran Pembangunan Hapi.js dengan ServBay
Hapi.js ialah rangka kerja Node.js yang berkuasa dan fleksibel untuk membina aplikasi serta API. ServBay pula menawarkan persekitaran pembangunan tempatan yang mudah untuk pembangun Node.js, lengkap dengan runtime Node.js, pelbagai sistem pangkalan data, dan pelayan web yang mudah dikonfigurasi. Artikel ini membimbing anda cara mencipta dan menjalankan projek Hapi.js dalam persekitaran ServBay serta mengkonfigurasi fungsi Laman Web ServBay untuk akses pelayar, termasuk demonstrasi sambungan ke pangkalan data terbina dalam ServBay.
Apa Itu Hapi.js?
Hapi.js telah dibangunkan oleh Walmart Labs sebagai rangka kerja Node.js yang mantap dan fleksibel untuk membina aplikasi dan perkhidmatan. Ia terkenal kerana sistem pelengkapnya yang hebat, pendekatan berasaskan konfigurasi, serta ciri keselamatan terbina. Ini membolehkan pembangun membangunkan aplikasi web dan API berprestasi tinggi yang senang diselenggara dengan lebih efisien.
Ciri-Ciri dan Kelebihan Utama Hapi.js
- Sistem Plugin: Hapi.js hadir dengan sistem plugin yang mantap dan mudah digunakan, menjadikan pengembangan ciri atau pengurusan logik aplikasi modular serta boleh guna semula.
- Pendekatan Konfigurasi Terdahulu: Ia mengetengahkan pembangunan berasaskan konfigurasi untuk mendefinisikan tingkah laku routing, validasi, caching dan lain-lain secara terperinci.
- Validasi Input: Perpustakaan Joi terbina menyediakan validasi data secara deklaratif untuk memastikan integriti dan keselamatan data.
- Ekosistem Kaya: Disokong komuniti aktif dan pelbagai plugin rasmi serta pihak ketiga, merangkumi keperluan biasa seperti autentikasi, autorisasi, caching dan logging.
- Ciri Keselamatan: Dilengkapi pelbagai ciri keselamatan terbina supaya pembangun mampu menangani ancaman web biasa, seperti validasi input dan kawalan CORS.
- Log & Debug: Menyediakan log kitaran permintaan terperinci dan alat debugging.
Menggunakan Hapi.js, pembangun dapat fokus membangunkan logik bisnes, sementara pengurusan HTTP, routing, validasi dan isu keselamatan diserahkan kepada rangka kerja ini.
Menyediakan Projek Hapi.js Menggunakan ServBay
Bahagian ini akan membimbing anda langkah demi langkah untuk mencipta dan menjalankan projek asas Hapi.js menggunakan persekitaran Node.js yang disediakan oleh ServBay, serta mengaksesnya menerusi ciri Laman Web (proksi balikan) ServBay.
Prasyarat
Pastikan anda telah:
- Memasang ServBay dengan berjaya di macOS.
- Mengaktifkan pakej Node.js di aplikasi ServBay melalui tab "Pakej" di panel kawalan ServBay.
- Biasa dengan operasi terminal asas dan pengurus pakej npm Node.js.
Mencipta Projek Hapi.js
Inisialisasi Direktori Projek
Buka terminal dan pergi ke direktori root laman web yang dicadangkan oleh ServBay, iaitu
/Applications/ServBay/www
. Cipta folder baru untuk projek anda (contoh:servbay-hapi-app
) dan masuk ke dalamnya:bashcd /Applications/ServBay/www mkdir servbay-hapi-app cd servbay-hapi-app
1
2
3Inisialisasi Projek Node.js
Di dalam direktori projek, gunakan npm untuk mulakan projek Node.js baharu:
bashnpm init -y
1Ini akan mewujudkan fail
package.json
di root projek anda.Pasang Kebergantungan Hapi.js
Pasang pakej utama Hapi.js menggunakan npm:
bashnpm install @hapi/hapi
1Pakej
@hapi/hapi
akan ditambah ke senarai kebergantungan projek anda.Cipta Fail Utama Aplikasi
Dalam direktori root projek, bina fail bernama
server.js
dan masukkan kod berikut untuk mewujudkan pelayan Hapi.js asas:javascript'use strict'; // Aktifkan mod ketat const Hapi = require('@hapi/hapi'); const init = async () => { const server = Hapi.server({ port: process.env.PORT || 3000, // Dengar port 3000 secara lalai, atau ikut variabel persekitaran PORT host: 'localhost' // Dengar pada alamat loopback tempatan }); // Takrifkan routing akar ringkas server.route({ method: 'GET', path: '/', handler: (request, h) => { return 'Hello from Hapi.js powered by ServBay!'; } }); // Mulakan pelayan await server.start(); console.log('Server running on %s', server.info.uri); }; // Tangani ralat Promise Rejection yang tidak ditangkap process.on('unhandledRejection', (err) => { console.error(err); process.exit(1); // Tamatkan 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
33Kod di atas mewujudkan pelayan Hapi yang mendengar
localhost
pada port tertentu (default: 3000) serta memaparkan handler GET mudah untuk laluan/
.
Masuk ke Mod Pembangunan dan Konfigurasi Laman Web ServBay
Semasa pembangunan, anda boleh menjalankan aplikasi Node.js terus dan gunakan ciri proksi balikan ServBay untuk memetakannya ke domain tersuai, boleh diakses pelayar lengkap dengan sijil SSL tempatan daripada ServBay.
Jalankan Pelayan Pembangunan Hapi.js
Di terminal, pastikan anda berada di dalam direktori
servbay-hapi-app
lalu jalankan failserver.js
dengannode
. Untuk digunakan bersama proksi balikan ServBay, gunakan port khusus contoh8585
:bashPORT=8585 node server.js
1Pelayan akan bermula dan memaparkan URI, contohnya
Server running on http://localhost:8585
. Kekalkan terminal ini terbuka; pelayan kini sedang berjalan.Konfigurasi Laman Web di ServBay (Proksi Balikan)
Buka aplikasi ServBay. Pergi ke tab "Laman Web" dan klik butang "+" di penjuru kiri bawah untuk menambah laman web baru.
- Nama:
ServBay Hapi Dev
(boleh diubah, hanya untuk rujukan senarai) - Domain:
servbay-hapi-dev.servbay.demo
(disarankan guna akhiran.servbay.demo
untuk elak konflik domain sebenar dan guna sijil CA tempatan ServBay) - Jenis Laman: Pilih
Proksi Balikan (Reverse Proxy)
- Proksi ke:
- Protokol:
http
- Alamat IP:
127.0.0.1
(kerana pelayan Node.js berjalan di tempatan) - Port:
8585
(sama seperti PORT yang anda gunakan semasa menjalankannode server.js
)
- Protokol:
Klik "Tambah" untuk selesaikan konfigurasi. ServBay akan secara automatik mengkonfigurasi pelayan web (seperti Caddy atau Nginx) untuk mengalihkan permintaan ke
https://servbay-hapi-dev.servbay.demo
kepadahttp://127.0.0.1:8585
. Sijil SSL juga dijana dan dipercayai secara automatik bagi domain.servbay.demo
menerusi User CA ServBay – membolehkan anda mengakses secara selamat melalui HTTPS di tempatan.Untuk langkah lebih terperinci, sila rujuk dokumentasi konfigurasi laman web ServBay.
- Nama:
Akses Aplikasi Hapi.js Anda
Buka pelayar web dan lawati domain terkonfigurasi
https://servbay-hapi-dev.servbay.demo
. Paparan "Hello from Hapi.js powered by ServBay!" sepatutnya kelihatan.Kini, sebarang kemas kini pada fail
server.js
anda (disarankan digabung dengan alat seperti nodemon untuk hot reload) akan terus terzahir melalui proksi balikan ServBay dalam pelayar.
Deployment Mod Produksi (Contoh)
Untuk persekitaran produksi, anda mungkin mahu pengurusan proses lebih mantap (seperti PM2) dengan konfigurasi berbeza. Berikut ialah contoh ringkas menjalankan pelayan pada port lain dan menggunakan proksi balikan ServBay:
Jalankan Pelayan Produksi Hapi.js
Misal anda ingin gunakan port berlainan (cth
8586
) serta konfigurasi pengeluaran:bashPORT=8586 NODE_ENV=production node server.js
1(Nota: Dalam produksi, gunakan pengurus proses seperti PM2 untuk kestabilan dan auto-restart. ServBay turut menyokong integrasi PM2.)
Konfigurasi Laman Web Produksi di ServBay (Proksi Balikan)
Pada tab "Laman Web" aplikasi ServBay, klik "+" semula untuk tambah laman web baru:
- Nama:
ServBay Hapi Prod
- Domain:
servbay-hapi-prod.servbay.demo
- Jenis:
Proksi Balikan (Reverse Proxy)
- Proksi ke:
- Protokol:
http
- Alamat IP:
127.0.0.1
- Port:
8586
- Protokol:
Klik "Tambah".
- Nama:
Akses Aplikasi Produksi Hapi.js
Buka pelayar dan lawati
https://servbay-hapi-prod.servbay.demo
. Paparan adalah sebagaimana output mod pembangunan (melainkan terdapat perbezaan logik hasil perubahanNODE_ENV
) – kini berjalan dengan konfigurasi dan port produksi.
Dengan ciri Laman Web ServBay, anda boleh dengan mudah mengurus pelbagai domain tempatan untuk pembangunan serta simulasi produksi, mengalihkan setiap aplikasi Hapi.js (atau mana-mana aplikasi Node.js) yang berjalan di port berlainan ke domain masing-masing.
Menyambung ke Pangkalan Data yang Disediakan ServBay
ServBay menyokong pelbagai sistem pangkalan data terbina seperti MySQL, MariaDB, PostgreSQL, MongoDB, dan Redis. Bahagian ini membimbing cara menyambungkan projek Hapi.js anda kepada pangkalan data ini.
Penting: Sebelum menyambung, pastikan anda telah mengaktifkan pakej perkhidmatan pangkalan data yang dikehendaki di tab "Pakej" aplikasi ServBay, serta perkhidmatan pangkalan data telah dijalankan. Semak status pangkalan data di panel kawalan ServBay.
Maklumat pengguna dan kata laluan lalai ServBay adalah seperti berikut:
- MySQL/MariaDB: Pengguna
root
, kata laluanpassword
- PostgreSQL: Pengguna
user
, kata laluanpassword
- MongoDB: Tiada autentikasi (default)
- Redis: Tiada autentikasi (default)
Nota: Demi keselamatan, sangat disarankan untuk menukar kata laluan lalai pangkalan data di ServBay, terutamanya jika digunakan selain persekitaran tempatan. Anda boleh tetapkan semula kata laluan root MySQL, MariaDB dan PostgreSQL dengan mudah melalui fungsi yang disediakan ServBay. Sila rujuk panduan reset kata laluan pangkalan data.
Berikut adalah contoh kod sambungan untuk setiap jenis pangkalan data. Pastikan anda memasang pustaka klien yang diperlukan dengan npm terlebih dahulu.
Sambung ke MySQL
Pasang klien MySQL:
bashnpm install mysql2 # atau mysql
1Contoh kod sambungan (menggunakan
mysql2
):javascriptconst mysql = require('mysql2'); const connection = mysql.createConnection({ host: 'localhost', user: 'root', // Nama pengguna lalai ServBay password: 'password', // Kata laluan lalai ServBay database: 'servbay_hapi_app' // Sila guna nama DB anda sendiri }); connection.connect(err => { if (err) { console.error('Ralat sambungan ke MySQL: ' + err.stack); return; } console.log('Bersambung ke MySQL sebagai id ' + connection.threadId); }); // Tutup sambungan jika perlu // connection.end();
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19Sambung ke MariaDB
Pasang klien MariaDB:
bashnpm install mariadb
1Contoh kod sambungan:
javascriptconst mariadb = require('mariadb'); const pool = mariadb.createPool({ host: 'localhost', user: 'root', // Nama pengguna lalai ServBay password: 'password', // Kata laluan lalai ServBay database: 'servbay_hapi_app', // Sila gunakan nama DB anda sendiri connectionLimit: 5 // Saiz pool sambungan }); pool.getConnection() .then(conn => { console.log("Bersambung ke MariaDB"); // conn.query(...) untuk lakukan pertanyaan conn.release(); // Kembalikan sambungan ke pool }) .catch(err => { console.error("Tidak dapat bersambung ke MariaDB kerana ralat: " + err); });
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18Sambung ke PostgreSQL
Pasang klien PostgreSQL:
bashnpm install pg
1Contoh kod sambungan:
javascriptconst { Pool } = require('pg'); const pool = new Pool({ user: 'user', // Nama pengguna lalai ServBay host: 'localhost', database: 'servbay_hapi_app', // Sila gunakan nama DB sendiri password: 'password', // Kata laluan lalai ServBay port: 5432, // Port lalai PostgreSQL }); pool.connect((err, client, done) => { if (err) { console.error('Ralat sambungan ke PostgreSQL: ', err); return; } console.log('Bersambung ke PostgreSQL'); client.query('SELECT NOW()', (err, res) => { done(); // Lepaskan sambungan client if (err) { console.error('Ralat semasa pertanyaan', err.stack); } else { console.log('Masa semasa PostgreSQL:', res.rows[0].now); } }); }); // Pool akan ditutup secara automatik bila aplikasi ditamatkan // 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
27Sambung ke MongoDB
Pasang klien MongoDB:
bashnpm install mongoose # atau mongodb
1Contoh kod sambungan (menggunakan
mongoose
):javascriptconst mongoose = require('mongoose'); mongoose.connect('mongodb://localhost/servbay-hapi-app', { useNewUrlParser: true, useUnifiedTopology: true, // MongoDB pemasangan lalai ServBay tiada autentikasi; jika anda aktifkan autentikasi, sila tambah authSource, user, pass dsb. // authSource: 'admin', // user: 'your_username', // pass: 'your_password', }) .then(() => console.log('MongoDB telah bersambung')) .catch(err => console.error('Ralat sambungan MongoDB:', err)); // Sambungan Mongoose di kekal sepajang hayat aplikasi // Untuk putus sambungan: mongoose.connection.close();
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15Sambung ke Redis
Pasang klien Redis:
bashnpm install redis
1Contoh kod sambungan:
javascriptconst redis = require('redis'); // Menggunakan konfigurasi lalai: host: 'localhost', port: 6379 const client = redis.createClient(); client.on('error', function (err) { console.error('Ralat Redis: ' + err); }); client.on('connect', function () { console.log('Klien Redis telah bersambung'); }); // Sambung ke pelayan Redis client.connect(); // Redis v4+ perlu pemanggilan connect() // Contoh: Tetapkan dan dapatkan nilai kunci // async function contohRedisPenggunaan() { // await client.set('mykey', 'myvalue'); // const value = await client.get('mykey'); // console.log('Nilai Redis:', value); // await client.del('mykey'); // } // contohRedisPenggunaan(); // Tutup sambungan sebelum aplikasi ditamatkan // 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 kod-kod ini dalam aplikasi Hapi.js anda untuk memanfaatkan sokongan pangkalan data tempatan daripada ServBay.
Rumusan
Dengan ServBay, membina persekitaran pembangunan Hapi.js di macOS jadi sungguh cekap. ServBay menawarkan solusi sehenti termasuk runtime Node.js yang mudah dipasang dan diurus, pelbagai pangkalan data sedia guna, dan ciri Laman Web (proksi balikan serta konfigurasi SSL automatik) untuk mudahkan akses tempatan. Ikuti langkah-langkah di atas untuk memulakan projek Hapi.js anda serta manfaatkan kebolehan ServBay bagi mempercepatkan aliran pembangunan anda.