Jika tidak memiliki pengalaman dengan Node.js, artikel ini mungkin akan dapat membantu. Mengenal Express.js dan kegunaannya adalah dasar untuk mengenal Node.js. Bagi user yang sudah familiar dengan Node.js, tidak perlu membaca lebih lanjut. Pada artikel ini akan dijelaskan cara membuat web server minimal dengan Node.js.
Instalasi Node.js
Sangat mudah melakukan instalasi Node.js ke Sistem Operasi yang digunakan oleh pengguna. Proses instalasi sangat sederhana untuk semua platform. Hal pertama yang wajib dilakukan adalah mengunjungi halaman website nodejs.org. Klik tombol warna hijau yang bertuliskan versi LTS (Recommended for Most. Users). LTS adalah singkatan dari Long-term Support, lebih stabil daripada versi yang dilabeli Current, yang berisi fitur-fitur baru dan kenaikan performa.
Untuk sistem operasi Windows dan macOS, installer yang telah diunduh akan memandu proses instalasi. Pada sistem operasi Linux akan lebih cepat jika menggunakan package manager. Linux user yang ingin menggunakan package manager, pastikan untuk mengikuti instruksi yang ada di halaman web. Banyak distribusi Linux akan menginstal versi Node.js yang paling lama jika tidak menambahkan package repository yang sesuai. Dapat juga mengunduh installer standalone yang sangat membantu untuk distribusi Node.js ke organisasi.
Penggunaan Terminal
Dalam artikel ini, semua contoh menggunakan terminal (consol atau command prompt). Disarankan untuk mempelajari terminal-terminal yang ada untuk Node.js. Pengguna Linux atau macOS bisa menggunakan bash atau zsh. Untuk pengguna Windows, tidak ada terminal tertentu yang diberikan oleh Microsoft, jadi pengguna Windows harus mencari terminalnya sendiri. Pengguna Windows bisa menggunakan “Git Bash” dari Git, yang memiliki experience yang hampir sama dengan terminal di Unix. Git bash memberikan minimal bash shell, namun masih menggunakan aplikasi console bawaan milik Windows. Pengguna Windows disarankan untuk menginstall ConsoleZ atau ConEmu. Ada opsi lain untuk pengguna Windows, yaitu Microsoft Powershell. Namun, jika penggunaan Node.js dilakukan di macOS/Linux dan Windows, disarankan menggunakan Git bash karena konsistensinya.
Untuk Windows 10 dan setelahnya, pengguna dapat menginstall Ubuntu Linux lewat Microsoft App Store. Selain itu opsi lain adalah virtualisasi. Dengan arsitektur komputer modern, performa virtual machine (VMs) tidak bisa dibedakan dengan mesin sesungguhnya. Pengguna Windows bisa menggunakan VirtualBox yang terkenal. Selanjutnya, bisa menggunakan Cloud9 (AWS) untuk cloud-based development.
Setelah mendapatkan shell yang ingin digunakan, disarankan untuk mengetahui dasar pengetahuan dari shell tersebut. Minimal sudah memahami navigasi direktori, seperti copy, move, dan delete file serta break out dari program command-line. Selain itu, disarankan untuk mempelajari cara mencari teks pada file, mencari file dan direktori.
Editors
Ada beberapa editor yang dapat digunakan, seperti vi dan Emacs untuk console editor Visual Studio Code dan Atom untuk modern editor.
npm
npm adalah manajemen paket yang terdapat di banyak platform untuk paket Node.js dan Express.js. Tujuan utama manajemen paket adalah instalasi paket-paket dan mengelola dependensi. npm terinsall ketika user menginstall Node.js jika pengguna mengikuti langkah-langkah yang diberikan.
npm install –g nodemon
Command (perintah) diatas adalah salah satu contoh command npm untuk install suatu utility atau paket-paket yang dibutuhkan. Nodemon merupakan utility yang terkenal yang berfungsi untuk restart Node secara otomatis jika pengguna melakukan perubahan pada source code. Flag –g menginformasikan ken pm untuk melakukan instalasi paket secara global, yang berarti berfungsi pada sistem.
Web server sederhana dengan Node.js
Bagi yang sudah sering membuat website HTML atau PHP atau ASP, mungkin sudah terbiasa dengan web server (Apache atau IIS) dapat memunculkan static file sehingga browser bisa melihatnya. Contohnya jika membuat file aku.html maka kita bisa melihat file tersebut di http://localhost/aku.html jika nama file dan lokasi direktori jelas diketahui.
Hello World
Buat file js dengan nama yang diinginkan contoh nodepertama.js, lalu ketik coding dibawah
var http = require(‘http’);
http.createServer(function (req, res) {
res.writeHead(200, {‘Content-Type’: ‘text/html’});
res.end(‘Hello World’);
}).listen(8080);
Pada terminal, pastikan direktori sama dengan direktori nodepertama.js lalu ketik
node nodepertama.js
Lalu buka browser dan ketik http://localhost:8080
Event-Driven Programming
Inti dari node.js adalah event-driven programming. Artinya, programmer harus memahami event apa yang tersedia dan bagaimana respon terhadap event itu. Contohnya jika user mengklik sesuatu dan programmer meng-handle event klik tersebut. Karena programmer tidak memiliki kontrol kapan user akan melakukan klik, jadi event-driven programming menjadi sangat intuitive.
Pada contoh diatas, event yang di handle adalah HTTP request. Coding http.createserver sebagai fungsi atas sebuah argument, fungsi akan dijalankan setiap kali ada HTTP request. Program sederhana yang dibuat hanyalah mengisi konten dengan plain text dan mengirim string “Hello world”.
Ketika programmer sudah terbiasa berpikir event-driven programming, programmer akan melihat event di mana saja. Seperti event ketika user melakukan navigasi dari satu halaman ke halaman lain. Cara aplikasi merespon navigasi disebut sebagai routing.
Routing
Routing mengacu pada mekanisme penyajian konten yang diminta oleh klien (user). Untuk aplikasi web-based client/server, client menentukan konten pada URL, khususnya path dan querystring.
“Hello World!” bisa dieksplorasi lebih lanjut. Coba kita buat website minimal yang terdiri dari homepage, About dan Not Found.
const http = require(‘http’);
const port = process.env.PORT || 8080
const server = http.createServer ((req,res) => {
// normalize url by removing querystring, optional
// trailing slash, and making it lowercase
const.path = req.url.replace (/\/?(?:\?.*)?$/,”).toLowerCase()
switch(path) {
case ‘ ‘ :
res.writeHead(200, { ‘content-Type’: ‘text/plain’})
res.end(‘Homepage’)
break
case ‘/about’:
res.writeHead(200, { ‘Content-Type’: ‘text/plain’})
res.end(‘About’)
break
default:
res.writeHead(404, {‘Content-Type’: ‘text/plain’})
res.End (‘Not Found’)
break
} })
server.listen(port, () => console.log (‘server started on port $(port); + ‘press Ctrl-C to terminate…’))
Jika menjalankan program diatas, user akan bisa mengunjungi homepage (http://localhost:8080) dan About (http://localhost:8080/about) . querystring yang tidak didefinisikan akan diabaikan, dan URL yang lain akan muncul halaman Not Found.
Static Resources
Setelah mengetahui bagaimana cara routing sederhana bekerja, sekarang kita bisa untuk membuat HTML dan logo yang disebut sebagai static resources karena umumnya tidak berubah .
Bagi user yang sering menggunakan Apache atau IIS, sudah barang tentu terbiasa membuat file HTML dan navigasinya serta menampilkannya ke dalam browser. Node.js tidak menggunakan konsep seperti itu, user harus melakukan hal seperti membuka file, membaca file tersebut dan mengirimkannya ke dalam browser bersamaan dengan kontennya.
Mari mencoba untuk bereksperimen, pertama buat direktori dalam projek yang akan kita buat sebut saja test atau nama sesuka kalian. Dalam direktori test itu kita akan membuat file HTML yaitu home.html, about.html, 404.html, buat subdirektori dengan nama img dan letakkan sebuah gambar dengan nama logo.png di dalam subdirektori img tersebut. Lalu buat program seperti dibawah lalu simpan dengan nama nodepertama.js, atau nama lain.
const http = require(‘http’)
const fs = require(‘fs’)
const port = process.env.PORT || 8080
function serveStaticFile(res, path, contentType, responseCode = 200) {
fs.readFile(__dirname + path, (err, data) => {
if(err) {
res.writeHead(500, { ‘Content-Type’: ‘text/plain’ })
return res.end(‘500 – Internal Error’)
}
res.writeHead(responseCode, { ‘Content-Type’: contentType })
res.end(data)
})
}
const server = http.createServer((req,res) => {
// normalize url by removing querystring, optional trailing slash, and
// making lowercase
const path = req.url.replace(/\/?(?:\?.*)?$/, ”).toLowerCase()
switch(path) {
case ”:
serveStaticFile(res, ‘/test/home.html’, ‘text/html’)
break
case ‘/about’:
serveStaticFile(res, ‘/test/about.html’, ‘text/html’)
break
case ‘/img/logo.png’:
serveStaticFile(res, ‘/test/img/logo.png’, ‘image/png’)
break
default:
serveStaticFile(res, ‘/test/404.html’, ‘text/html’, 404)
break
}
})
server.listen(port, () => console.log(`server started on port ${port}; ` +
‘press Ctrl-C to terminate….’))
Pada program diatas telah dibuat fungsi yang menjalankan banyak perintah yaitu serveStaticFile . fs.readFile adalah metode asinkronus untuk pembacaan file. Versi sinkronusnya bisa menggunakan fs.readFileSync. fs.readFile menggunakan pattern yang disebut dengan callbacks. User memberikan fungsi yang disebut dengan callback function, dan ketika perintah telah selesai dikerjakan, fungsi callback itu akan dipanggil. Pada case ini fs.readFile akan membaca konten file tertentu dan mengeksekusi fungsi callback ketika file telah dibaca, ketika file tidak tersedia atau ada hambatan karena tidak ada izin untuk membaca file yang dimaksud, variabel err akan ter-set dan fungsi akan menampilkan status HTTP 500 yang mengindikasikan server error. Jika file terbaca, file akan dikirim ke klien.