Your SlideShare is downloading. ×
Pengembangan Aplikasi Cloud ComputingMenggunakan Node.jsOleh:Bambang Purnomosidi D. P. (http://bpdp.name)Kontributor:Aji K...
Kata PengantarBuku bebas ini merupakan buku yang dirancang untuk keperluan memberikan penge-tahuan mendasar pengembangan a...
Daftar IsiKata Pengantar iDaftar Gambar iiiListing Program ivDaftar Tabel v1. Pengenalan Cloud Computing dan Infrastruktur...
Daftar Isi iii2.1.2. Perintah-perintah REPL . . . . . . . . . . . . . . . . . . . . . . . . 222.2. Dasar-dasar JavaScript ...
Daftar Isi iv4.2.5. Menampilkan Informasi Paket . . . . . . . . . . . . . . . . . . . . . 464.2.6. Memperbaharui Paket . ....
Daftar Isi vKonfigurasi JavaScript untuk Browser . . . . . . . . . . . . . . . . 72Hapus File yang Tidak Diperlukan . . . ....
Daftar Gambar1.1. Model Cloud Computing . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21.2. Pendaftaran di CF . ...
Listing Program1.1. Instalasi vmc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51.2. Peringatan set...
Listing Program viii2.3. Contoh penggunaan perintah .save di sesi REPL . . . . . . . . . . . . . . 232.4. readline.js: pen...
Listing Program ix6.1. Menjalankan server MongoDB (mongod) . . . . . . . . . . . . . . . . . . . 536.2. Mengakhiri server ...
Daftar Tabelx
BAB 1Pengenalan Cloud Computing dan Infrastruktur Pengembangan AplikasiBerbasis Node.js1.1. Apa itu Cloud Computing?Cloud ...
1.2. Karakteristik Cloud Computing 2Gambar 1.1.: Model Cloud ComputingOn-demand self-service: layanan bisa diperoleh pada ...
1.3. Public dan Private Cloud Computing 3bekerja dengan instan aplikasi virtual tersebut5.1.3. Public dan Private Cloud Co...
1.6. Node.js dan Cloud Computing 4CodingTest di komputer lokalUpload ke server (dalam Cloud Computing, proses ini diistila...
1.7. Layanan Hosting Aplikasi: CloudFoundry 5Gambar 1.2.: Pendaftaran di CF1 $ gem search vmc −−remote | grep "bvmc s "2 v...
1.7. Layanan Hosting Aplikasi: CloudFoundry 6Gambar 1.3.: Hasil proses pendaftaran di CF28 Fetching : caldecott −c l i e n...
1.7. Layanan Hosting Aplikasi: CloudFoundry 7Gambar 1.4.: E-mail persetujuan dan pemberitahuan credentials59 I n s t a l l...
1.7. Layanan Hosting Aplikasi: CloudFoundry 8Listing 1.1: Instalasi vmcPesan peringatan berikut ini:1 WARNING: You don ’ t...
1.7. Layanan Hosting Aplikasi: CloudFoundry 91 $ vmc help2 Showing basic command set . Run with ’ help −−a l l ’ to l i s ...
1.7. Layanan Hosting Aplikasi: CloudFoundry 1062 −u , −−proxy EMAIL Run t h i s command as another user ( admin )63 −v , −...
1.7. Layanan Hosting Aplikasi: CloudFoundry 1125 node 0 . 4 . 1 226 node06 0 . 6 . 827 node08 0 . 8 . 228 ruby18 1 . 8 . 7...
1.7. Layanan Hosting Aplikasi: CloudFoundry 1287 java_web88 l i f t89 node90 play91 rack92 r a i l s 393 s i n a t r a94 s...
1.8. Pengelolaan Aplikasi di Cloud 136 20:30:31 −bpdp@bpdp−arch :~/ master / nodejs$Listing 1.10: Hasil dari download Node...
1.8. Pengelolaan Aplikasi di Cloud 141.8.1. Push, Delete, Update AplikasiPada pembahasan ini, akan diberikan contoh menggu...
1.8. Pengelolaan Aplikasi di Cloud 1524 $ node app2526 $Listing 1.15: Menggunakan express untuk membuat rerangka aplikasiP...
1.8. Pengelolaan Aplikasi di Cloud 1635 } ) ;Listing 1.17: app.js untuk ExpressJSEdit file routes/index.js sebagai berikut:...
1.8. Pengelolaan Aplikasi di Cloud 17Gambar 1.5.: Hasil push ke server36 Uploading bpdp−hello −express . . . OK37 Starting...
1.8. Pengelolaan Aplikasi di Cloud 18Gambar 1.6.: Hasil update dengan menyertakan versi Node.js4 Deleting bpdp−m1−hellonof...
1.8. Pengelolaan Aplikasi di Cloud 19Gambar 1.7.: Deployment menggunakan versi runtime tertentu1.8.3. Tanpa FrameworkTanpa...
1.8. Pengelolaan Aplikasi di Cloud 20Gambar 1.8.: Hasil deployement app.js tanpa framework26 2: none27 URL> hello −noframe...
BAB 2REPL dan Dasar-dasar JavaScript di Node.js2.1. REPLREPL adalah lingkungan pemrograman interaktif, tempat developer bi...
2.1. REPL 22Tanda “>” adalah tanda bahwa REPL Node.js siap untuk menerima perintah. Untukmelihat perintah-perintah REPL, b...
2.2. Dasar-dasar JavaScript di Node.js 231 $ node2 > console . log ( "Selamat datang di Node.js" )3 Selamat datang di Node...
2.2. Dasar-dasar JavaScript di Node.js 24Implementasi dari pola diatas bisa dilihat pada kode sumber berikut ini (diambil ...
2.2. Dasar-dasar JavaScript di Node.js 251 var jumlahMahasiswa = 302 console . log ( ’Jumlah mahasiswa dalam satu kelas = ...
2.2. Dasar-dasar JavaScript di Node.js 269 console . log ( "Posisi menu = " + MENU) ;1011 // Posisi menu = Home12 // Posis...
2.2. Dasar-dasar JavaScript di Node.js 278 undefined9 >10 > function add2Numbers ( angka1 , angka2 ) {11 . . . return angk...
2.2. Dasar-dasar JavaScript di Node.js 281 function induk () {23 var awal = 0;4 function tambahkan () {5 awal++;6 }78 tamb...
2.2. Dasar-dasar JavaScript di Node.js 299 console . log ( arrMembers [ 4 ] ) ;10 // hasil: undefined - karena tidak ada11...
2.2. Dasar-dasar JavaScript di Node.js 30“1234.543”“baris pertama n baris kedua”Contoh terakhir di atas menggunakan karakt...
2.2. Dasar-dasar JavaScript di Node.js 3111 "phoneNumber " :12 {13 "home" : "212 555 -1234" ,14 "fax" : "646 555 -4567"15 ...
2.2. Dasar-dasar JavaScript di Node.js 3223 } else i f ( answer > 70) {24 console . log ( "Nilai: B" ) ;25 } else i f ( an...
2.2. Dasar-dasar JavaScript di Node.js 3336 // hasil:37 // $ node switch.js38 // Menu39 // ====40 // 1. Mengisi data41 // ...
2.2. Dasar-dasar JavaScript di Node.js 3410 // Nilai dari iterasi c adalah: 3Listing 2.18: Pernyataan for .. indo .. while...
2.2. Dasar-dasar JavaScript di Node.js 35label digunakan untuk memberi pengenal pada suatu lokasi program sehingga bisadir...
2.2. Dasar-dasar JavaScript di Node.js 36JavaScript yang asynchronous. Untuk kasus asynchrous, pemrogram lebih disarankanm...
BAB 3Paradigma Pemrograman di JavaScript3.1. Pemrograman FungsionalPemrograman fungsional, atau sering disebut functional ...
3.1. Pemrograman Fungsional 38ditautkan (bound) ke suatu identifier). Berikut adalah implementasi dari konsep ini diJavaSCr...
3.1. Pemrograman Fungsional 3923 // TIGAListing 3.2: Higher-order Function di JavaScript3.1.3. ClosureSuatu closure merupa...
3.2. Pemrograman Berorientasi Obyek 4026 var addTen = add . curry ( 1 0 ) ;27 console . log ( addTen ( 2 0 ) ) ; //30Listi...
3.2. Pemrograman Berorientasi Obyek 4117 var halDua = new Halaman( "http :// bpdp.name/login?fromHome" ) ;1819 console . l...
3.2. Pemrograman Berorientasi Obyek 4240 // mari diuji41 var subKelasSatu = new SubKelas ( "Parameter 1 Dari Sub Kelas 1" ...
BAB 4Mengelola Paket Menggunakan npm4.1. Apakah npm Itu?Node.js memungkinkan developer untuk mengembangkan aplikasi secara...
4.2. Menggunakan npm 4413 stars , start , stop , submodule , tag , test , tst , un ,14 u n i n s t a l l , unlink , unpubl...
4.2. Menggunakan npm 45Jika berada pada direktori $HOME, maka paket-paket npm tersebut akan terinstall di$HOME/.npm, sedan...
Pengembangan Aplikasi Cloud Computing Menggunakan Node.js
Pengembangan Aplikasi Cloud Computing Menggunakan Node.js
Pengembangan Aplikasi Cloud Computing Menggunakan Node.js
Pengembangan Aplikasi Cloud Computing Menggunakan Node.js
Pengembangan Aplikasi Cloud Computing Menggunakan Node.js
Pengembangan Aplikasi Cloud Computing Menggunakan Node.js
Pengembangan Aplikasi Cloud Computing Menggunakan Node.js
Pengembangan Aplikasi Cloud Computing Menggunakan Node.js
Pengembangan Aplikasi Cloud Computing Menggunakan Node.js
Pengembangan Aplikasi Cloud Computing Menggunakan Node.js
Pengembangan Aplikasi Cloud Computing Menggunakan Node.js
Pengembangan Aplikasi Cloud Computing Menggunakan Node.js
Pengembangan Aplikasi Cloud Computing Menggunakan Node.js
Pengembangan Aplikasi Cloud Computing Menggunakan Node.js
Pengembangan Aplikasi Cloud Computing Menggunakan Node.js
Pengembangan Aplikasi Cloud Computing Menggunakan Node.js
Pengembangan Aplikasi Cloud Computing Menggunakan Node.js
Pengembangan Aplikasi Cloud Computing Menggunakan Node.js
Pengembangan Aplikasi Cloud Computing Menggunakan Node.js
Pengembangan Aplikasi Cloud Computing Menggunakan Node.js
Pengembangan Aplikasi Cloud Computing Menggunakan Node.js
Pengembangan Aplikasi Cloud Computing Menggunakan Node.js
Pengembangan Aplikasi Cloud Computing Menggunakan Node.js
Pengembangan Aplikasi Cloud Computing Menggunakan Node.js
Pengembangan Aplikasi Cloud Computing Menggunakan Node.js
Pengembangan Aplikasi Cloud Computing Menggunakan Node.js
Pengembangan Aplikasi Cloud Computing Menggunakan Node.js
Pengembangan Aplikasi Cloud Computing Menggunakan Node.js
Pengembangan Aplikasi Cloud Computing Menggunakan Node.js
Pengembangan Aplikasi Cloud Computing Menggunakan Node.js
Pengembangan Aplikasi Cloud Computing Menggunakan Node.js
Pengembangan Aplikasi Cloud Computing Menggunakan Node.js
Pengembangan Aplikasi Cloud Computing Menggunakan Node.js
Pengembangan Aplikasi Cloud Computing Menggunakan Node.js
Pengembangan Aplikasi Cloud Computing Menggunakan Node.js
Pengembangan Aplikasi Cloud Computing Menggunakan Node.js
Pengembangan Aplikasi Cloud Computing Menggunakan Node.js
Pengembangan Aplikasi Cloud Computing Menggunakan Node.js
Pengembangan Aplikasi Cloud Computing Menggunakan Node.js
Pengembangan Aplikasi Cloud Computing Menggunakan Node.js
Pengembangan Aplikasi Cloud Computing Menggunakan Node.js
Pengembangan Aplikasi Cloud Computing Menggunakan Node.js
Upcoming SlideShare
Loading in...5
×

Pengembangan Aplikasi Cloud Computing Menggunakan Node.js

9,772

Published on

Buku bebas karya saya tentang pengembangan aplikasi cloud computing menggunakan Node.js. Lisensi: CC-BY-SA. Kode sumber (LaTeX) serta kode sumber dari program2 yang ada di buku ini bisa diperoleh di akun github saya: https://github.com/bpdp/buku-cloud-nodejs

Published in: Education, Technology, Business
7 Comments
24 Likes
Statistics
Notes
No Downloads
Views
Total Views
9,772
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
1,527
Comments
7
Likes
24
Embeds 0
No embeds

No notes for slide

Transcript of "Pengembangan Aplikasi Cloud Computing Menggunakan Node.js"

  1. 1. Pengembangan Aplikasi Cloud ComputingMenggunakan Node.jsOleh:Bambang Purnomosidi D. P. (http://bpdp.name)Kontributor:Aji Kisworo Mukti (http://adzymaniac.web.id)Buku bebas dengan lisensi Creative Common BY-SA. Silahkan membaca isiselengkapnya serta penjelasannya dihttp://wiki.creativecommons.org/Licenses/by-sa/3.0LegalText_(Indonesian)May 6, 2013
  2. 2. Kata PengantarBuku bebas ini merupakan buku yang dirancang untuk keperluan memberikan penge-tahuan mendasar pengembangan aplikasi berbasis Cloud Computing, khususnya meng-gunakan Node.js. Pada buku ini akan dibahas penggunaan Node.js untuk mengem-bangkan aplikasi SaaS (Software as a Service). Node.js merupakan software di sisiserver yang dikembangkan dari engine JavaScript V8 dari Google serta libuv (https://github.com/joyent/libuv)1.Jika selama ini kebanyakan orang mengenal JavaScript hanya di sisi klien (browser),dengan Node.js ini, pemrogram bisa menggunakan JavaScript di sisi server. Meskipunini bukan hal baru, tetapi paradigma pemrograman yang dibawa oleh Node.js denganevented - asynchronous I/O menarik dalam pengembangan aplikasi Web (selain kitahanya perlu menggunakan 1 bahasa yang sama di sisi server maupun di sisi klien).Untuk mengikuti materi yang ada pada buku ini, pembaca diharapkan menyiapkanperanti komputer dengan beberapa software berikut terpasang:Sistem operasi Linux (distribusi apa saja) - lihat di http://www.distrowatch.com.Sistem operasi Linux ini bukan keharusan, anda bisa menggunakan Windows tetapisilahkan membuat penyesuaian-penyesuaian sendiri yang diperlukan. Kirimi sayapull request jika anda menuliskan pengalaman anda di Windows!Git (untuk version control system) - bisa diperoleh di http://git-scm.com. Sayamenggunakan versi 1.8.2.2.Ruby (http://www.ruby-lang.org/en/) - diperlukan untuk menginstall dan mengek-sekusi vmc, perintah command line untuk mengelola aplikasi Cloud di Cloud-Foundry. Versi Ruby yang digunakan adalah versi 2.0.0p0 (2013-02-24 revision39474).mongoDB (basis data NOSQL) - bisa diperoleh di http://www.mongodb.org, sayamenggunakan versi 2.4.4-pre-Vim (untuk mengedit source code) - bisa diperoleh di http://www.vim.org. Jikatidak terbiasa menggunakan Vim, bisa menggunakan editor teks lainnya (atauIDE), misalnya gedit (ada di GNOME), geany (http://geany.org), KATE (adadi KDE), dan lain-lain.Software utama untuk keperluan workshop ini yaitu Node.js serta command line toolsdari provider Cloud Computing (materi ini menggunakan fasilitas dari CloudFoundry),akan dibahas pada pada bab-bab tertentu. Materi akan lebih banyak berorientasi ke com-mand line / shell sehingga para pembaca sebaiknya sudah memahami cara-cara menggu-nakan shell di Linux. Anda bisa menggunakan shell apa saja (bash, tcsh, zsh, ksh, danlain-lain), saya menggunakan bash 4.2.45(2)-release.Have fun!1Versi sebelum 0.9.0 menggunakan libev dari Mark Lechmanni
  3. 3. Daftar IsiKata Pengantar iDaftar Gambar iiiListing Program ivDaftar Tabel v1. Pengenalan Cloud Computing dan Infrastruktur Pengembangan Aplikasi Berba-sis Node.js 11.1. Apa itu Cloud Computing? . . . . . . . . . . . . . . . . . . . . . . . . . . 11.2. Karakteristik Cloud Computing . . . . . . . . . . . . . . . . . . . . . . . . 11.3. Public dan Private Cloud Computing . . . . . . . . . . . . . . . . . . . . . 31.4. Model Layanan Cloud Computing . . . . . . . . . . . . . . . . . . . . . . . 31.5. Pengembangan Aplikasi di Cloud Computing . . . . . . . . . . . . . . . . 31.6. Node.js dan Cloud Computing . . . . . . . . . . . . . . . . . . . . . . . . . 41.7. Layanan Hosting Aplikasi: CloudFoundry . . . . . . . . . . . . . . . . . . 41.7.1. Pendaftaran . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41.7.2. Instalasi Command Line Utilities . . . . . . . . . . . . . . . . . . . 41.7.3. Konfigurasi di Server Cloud . . . . . . . . . . . . . . . . . . . . . . 101.7.4. Instalasi dan Konfigurasi Node.js di Komputer Lokal . . . . . . . . 121.8. Pengelolaan Aplikasi di Cloud . . . . . . . . . . . . . . . . . . . . . . . . . 131.8.1. Push, Delete, Update Aplikasi . . . . . . . . . . . . . . . . . . . . . 141.8.2. Menggunakan Framework ExpressJS . . . . . . . . . . . . . . . . . 141.8.3. Tanpa Framework . . . . . . . . . . . . . . . . . . . . . . . . . . . 192. REPL dan Dasar-dasar JavaScript di Node.js 212.1. REPL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212.1.1. Mengaktifkan REPL . . . . . . . . . . . . . . . . . . . . . . . . . . 21ii
  4. 4. Daftar Isi iii2.1.2. Perintah-perintah REPL . . . . . . . . . . . . . . . . . . . . . . . . 222.2. Dasar-dasar JavaScript di Node.js . . . . . . . . . . . . . . . . . . . . . . . 232.2.1. Membaca Masukan dari Stream / Masukan Standar (stdin) . . . . 232.2.2. Nilai/Value dan Tipe Data . . . . . . . . . . . . . . . . . . . . . . 242.2.3. Variabel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252.2.4. Konstanta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252.2.5. Fungsi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26Pengertian Fungsi . . . . . . . . . . . . . . . . . . . . . . . . . . . 26Definisi Fungsi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26Fungsi Anonim . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27Fungsi Rekursif . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27Fungsi di dalam Fungsi / Nested Functions . . . . . . . . . . . . . 272.2.6. Literal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28Literal Array . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28Literal Boolean . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29Literal Integer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29Literal Floating-point . . . . . . . . . . . . . . . . . . . . . . . . . 29Literal Obyek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29Literal String . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292.2.7. Struktur Data dan Representasi JSON . . . . . . . . . . . . . . . . 302.2.8. Aliran Kendali . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31Pernyataan Kondisi if .. else if .. else . . . . . . . . . . . . . . . . 31Pernyataan switch . . . . . . . . . . . . . . . . . . . . . . . . . . . 32Looping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 332.2.9. Penanganan Error . . . . . . . . . . . . . . . . . . . . . . . . . . . 353. Paradigma Pemrograman di JavaScript 373.1. Pemrograman Fungsional . . . . . . . . . . . . . . . . . . . . . . . . . . . 373.1.1. Ekspresi Lambda . . . . . . . . . . . . . . . . . . . . . . . . . . . . 373.1.2. Higher-order Function . . . . . . . . . . . . . . . . . . . . . . . . . 383.1.3. Closure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393.1.4. Currying . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393.2. Pemrograman Berorientasi Obyek . . . . . . . . . . . . . . . . . . . . . . . 403.2.1. Pengertian . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 403.2.2. Definisi Obyek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 403.2.3. Inheritance / Pewarisan . . . . . . . . . . . . . . . . . . . . . . . . 414. Mengelola Paket Menggunakan npm 434.1. Apakah npm Itu? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 434.2. Menggunakan npm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 434.2.1. Instalasi Paket . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 444.2.2. Struktur Instalasi Paket Node.js . . . . . . . . . . . . . . . . . . . 444.2.3. Menghapus Paket / Uninstall . . . . . . . . . . . . . . . . . . . . . 454.2.4. Mencari Paket . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
  5. 5. Daftar Isi iv4.2.5. Menampilkan Informasi Paket . . . . . . . . . . . . . . . . . . . . . 464.2.6. Memperbaharui Paket . . . . . . . . . . . . . . . . . . . . . . . . . 475. Node.js dan Web: Teknik Pengembangan Aplikasi 485.1. Pendahuluan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 485.2. Event-Driven Programming dan EventEmitter . . . . . . . . . . . . . . . . 495.3. Asynchronous / Non-blocking IO dan Callback . . . . . . . . . . . . . . . 506. Mengakses Basis Data NoSQL: mongoDB 526.1. Apa itu Basis Data NoSQL? . . . . . . . . . . . . . . . . . . . . . . . . . . 526.2. Mengenal mongoDB dan Fitur-fiturnya . . . . . . . . . . . . . . . . . . . . 526.2.1. Memulai Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 536.2.2. Klien dan Shell mongoDB . . . . . . . . . . . . . . . . . . . . . . . 546.2.3. Documents dan Collections . . . . . . . . . . . . . . . . . . . . . . 566.3. Node.js dan MongoDB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 576.3.1. Node-gyp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 576.3.2. Driver Node.js untuk mongoDB . . . . . . . . . . . . . . . . . . . . 576.3.3. Mengakses mongoDB dari Node.js . . . . . . . . . . . . . . . . . . 586.4. Aplikasi Web Menggunakan Node.js dan mongoDB . . . . . . . . . . . . . 597. Pola Arsitektur Aplikasi Web: MVC dan ExpressJS 627.1. Apa itu Pola Arsitektur? . . . . . . . . . . . . . . . . . . . . . . . . . . . . 627.2. Pola Arsitektur MVC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 627.3. Implementasi Pola Arsitektur MVC Menggunakan ExpressJS . . . . . . . 647.3.1. Struktur Aplikasi . . . . . . . . . . . . . . . . . . . . . . . . . . . . 647.3.2. File-file yang Diperlukan . . . . . . . . . . . . . . . . . . . . . . . . 657.3.3. Hasil . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 667.4. Pola Arsitektur Aplikasi Web Lain dan Implementasinya . . . . . . . . . . 668. Real-time Web Menggunakan Socket.io 688.1. Apa itu Real-time Web? . . . . . . . . . . . . . . . . . . . . . . . . . . . . 688.2. Teknologi Pendukung Real-time Web . . . . . . . . . . . . . . . . . . . . . 688.2.1. Ajax Technology . . . . . . . . . . . . . . . . . . . . . . . . . . . . 688.2.2. Comet dan Push Technology . . . . . . . . . . . . . . . . . . . . . . 69SSE (Server-Sent Events) . . . . . . . . . . . . . . . . . . . . . . . 69Bayeux Protocol . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69BOSH Protocol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 698.2.3. WebSocket . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 708.3. Socket.io . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 708.3.1. Apa itu Socket.io? . . . . . . . . . . . . . . . . . . . . . . . . . . . 708.3.2. Menggunakan Socket.io untuk Real-time Web . . . . . . . . . . . . 71Tentang Aplikasi . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71Membuat Kerangka Aplikasi dengan ExpressJS . . . . . . . . . . . 71Instalasi Paket yang Diperlukan . . . . . . . . . . . . . . . . . . . . 71
  6. 6. Daftar Isi vKonfigurasi JavaScript untuk Browser . . . . . . . . . . . . . . . . 72Hapus File yang Tidak Diperlukan . . . . . . . . . . . . . . . . . . 72Ubah File-file Tertentu . . . . . . . . . . . . . . . . . . . . . . . . . 72Menjalankan Server Socket.io . . . . . . . . . . . . . . . . . . . . . 73Daftar Pustaka 76Lampiran 78A. Gaya Penulisan Kode / Coding Style 78A.1. Tentang Gaya Penulisan Kode . . . . . . . . . . . . . . . . . . . . . . . . . 78A.2. npm’s Coding Style . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78A.2.1. DESCRIPTION . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78A.2.2. Line Length . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79A.2.3. Indentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79A.2.4. Curly braces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79A.2.5. Semicolons . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79A.2.6. Comma First . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80A.2.7. Whitespace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80A.2.8. Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80A.2.9. Callbacks, Sync/async Style . . . . . . . . . . . . . . . . . . . . . . 81A.2.10.Errors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81A.2.11.Logging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81A.2.12.Case, naming, etc. . . . . . . . . . . . . . . . . . . . . . . . . . . . 81A.2.13.null, undefined, false, 0 . . . . . . . . . . . . . . . . . . . . . . . . . 81B. Commit History dari Penulis Utama dan Kontributor 83Indeks 85
  7. 7. Daftar Gambar1.1. Model Cloud Computing . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21.2. Pendaftaran di CF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51.3. Hasil proses pendaftaran di CF . . . . . . . . . . . . . . . . . . . . . . . . 61.4. E-mail persetujuan dan pemberitahuan credentials . . . . . . . . . . . . . 71.5. Hasil push ke server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171.6. Hasil update dengan menyertakan versi Node.js . . . . . . . . . . . . . . . 181.7. Deployment menggunakan versi runtime tertentu . . . . . . . . . . . . . . 191.8. Hasil deployement app.js tanpa framework . . . . . . . . . . . . . . . . . . 204.1. Tampilan “npm ls” pada direktori proyek dengan paket terinstall lengkap . 466.1. Admin web console untuk mongoDB . . . . . . . . . . . . . . . . . . . . . 557.1. Pola arsitektur MVC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 637.2. Pola arsitektur MVC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 678.1. Hasil di browser dari ExpressJS + Socket.io . . . . . . . . . . . . . . . . . 75vi
  8. 8. Listing Program1.1. Instalasi vmc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51.2. Peringatan setting PATH untuk vmc . . . . . . . . . . . . . . . . . . . . . 81.3. Peringatan setting PATH untuk vmc . . . . . . . . . . . . . . . . . . . . . 81.4. Hasil gem yang terinstall . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81.5. Hasil opsi help dari vmc . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91.6. Mengubah target server - belum ada konfigurasi . . . . . . . . . . . . . . . 101.7. Mengubah target server - setelah konfigurasi . . . . . . . . . . . . . . . . . 101.8. Login ke server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101.9. Mengubah password server . . . . . . . . . . . . . . . . . . . . . . . . . . . 121.10. Hasil dari download Node.js . . . . . . . . . . . . . . . . . . . . . . . . . . 121.11. Ekstraksi Node.js . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131.12. Konfigurasi variabel lingkungan Node.js . . . . . . . . . . . . . . . . . . . 131.13. Instalasi ExpressJS menggunakan npm . . . . . . . . . . . . . . . . . . . . 141.14. Perintah express . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141.15. Menggunakan express untuk membuat rerangka aplikasi . . . . . . . . . . 141.16. package.json untuk ExpressJS . . . . . . . . . . . . . . . . . . . . . . . . . 151.17. app.js untuk ExpressJS . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151.18. Hasil edit routes/index.js . . . . . . . . . . . . . . . . . . . . . . . . . . . 161.19. Deployment aplikasi ExpressJS ke CF . . . . . . . . . . . . . . . . . . . . 161.20. Update: menambahkan versi Node.js ke routes/index.js . . . . . . . . . . . 171.21. Mengupdate aplikasi di server . . . . . . . . . . . . . . . . . . . . . . . . . 171.22. Menghapus aplikasi yang di-deploy di CF . . . . . . . . . . . . . . . . . . 171.23. Deployment ke CF dengan memilih runtime Node.js . . . . . . . . . . . . 181.24. app.js tanpa framework . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191.25. Deployment app.js tanpa framework . . . . . . . . . . . . . . . . . . . . . 192.1. Node.js REPL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212.2. Contoh penggunaan .load dalam REPL . . . . . . . . . . . . . . . . . . . . 22vii
  9. 9. Listing Program viii2.3. Contoh penggunaan perintah .save di sesi REPL . . . . . . . . . . . . . . 232.4. readline.js: penggunaan pustaka Readline untuk masukan . . . . . . . . . 242.5. Fitur dynamically typed language . . . . . . . . . . . . . . . . . . . . . . . 252.6. Contoh konstanta dalam JavaScript . . . . . . . . . . . . . . . . . . . . . . 252.7. Sintaksis Fungsi dalam JavaScript . . . . . . . . . . . . . . . . . . . . . . . 262.8. Pemanggilan Fungsi dalam JavaScript . . . . . . . . . . . . . . . . . . . . 262.9. Contoh deklarasi fungsi dan pemanggilannya . . . . . . . . . . . . . . . . 262.10. Fungsi anonim . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272.11. Fungsi rekursif untuk menghitung faktorial . . . . . . . . . . . . . . . . . 272.12. Fungsi di dalam Fungsi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282.13. Array di JavaScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282.14. Representasi JSON . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302.15. Pernyataan if .. else if .. else . . . . . . . . . . . . . . . . . . . . . . . . . 312.16. Pernyataan Contoh penggunaan “switch” . . . . . . . . . . . . . . . . . . . 322.17. Pernyataan for . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 332.18. Pernyataan for .. in . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 332.19. Pernyataan do .. while . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 342.20. Pernyataan while . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 342.21. Pernyataan break dan continue . . . . . . . . . . . . . . . . . . . . . . . . 352.22. Pernyataan break dengan label . . . . . . . . . . . . . . . . . . . . . . . . 352.23. Pernyataan try catch finally . . . . . . . . . . . . . . . . . . . . . . . . . . 362.24. Pernyataan try catch throw . . . . . . . . . . . . . . . . . . . . . . . . . . 363.1. Ekspresi Lambda di JavaScript . . . . . . . . . . . . . . . . . . . . . . . . 383.2. Higher-order Function di JavaScript . . . . . . . . . . . . . . . . . . . . . 383.3. Closure di JavaScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393.4. Currying di JavaScript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393.5. Definisi obyek di JavaScript . . . . . . . . . . . . . . . . . . . . . . . . . . 403.6. Pewarisan di PBO JavaScript . . . . . . . . . . . . . . . . . . . . . . . . . 414.1. Sintaksis lengkap perintah npm . . . . . . . . . . . . . . . . . . . . . . . . 434.2. Cara install paket menggunakan npm . . . . . . . . . . . . . . . . . . . . . 444.3. Argumen npm untuk melihat daftar paket terpasang . . . . . . . . . . . . 454.4. npm ls pada aplikasi yang paket-paketnya belum terinstall . . . . . . . . . 454.5. Perintah menghapus paket di npm . . . . . . . . . . . . . . . . . . . . . . 454.6. Perintah menghapus paket di npm . . . . . . . . . . . . . . . . . . . . . . 464.7. Menampilkan rincian suatu paket dalam format JSON . . . . . . . . . . . 464.8. Memperbaharui paket . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 475.1. pegawai.json . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 485.2. server.js . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 495.3. server-on-error.js . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 505.4. Membaca file secara synchronous . . . . . . . . . . . . . . . . . . . . . . . 505.5. Membaca file secara asynchronous . . . . . . . . . . . . . . . . . . . . . . 51
  10. 10. Listing Program ix6.1. Menjalankan server MongoDB (mongod) . . . . . . . . . . . . . . . . . . . 536.2. Mengakhiri server MongoDB (mongod) . . . . . . . . . . . . . . . . . . . . 546.3. Shell mongoDB (mongo) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 546.4. Sesi dalam shell mongoDB . . . . . . . . . . . . . . . . . . . . . . . . . . . 566.5. Instalasi node-gyp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 576.6. Instalasi driver mongoDB . . . . . . . . . . . . . . . . . . . . . . . . . . . 576.7. Instalasi wrapper mongojs . . . . . . . . . . . . . . . . . . . . . . . . . . . 586.8. Mengakses mongoDB dari Node.js . . . . . . . . . . . . . . . . . . . . . . 586.9. Express+MongoDB web: app.js . . . . . . . . . . . . . . . . . . . . . . . . 596.10. Express+MongoDB web: package.json . . . . . . . . . . . . . . . . . . . . 606.11. Express+MonggoDB web: routes/index.js . . . . . . . . . . . . . . . . . . 606.12. Express+MongoDB web: routes/employee.js . . . . . . . . . . . . . . . . . 606.13. Express+MongoDB web: views/employee.jade . . . . . . . . . . . . . . . . 616.14. views/index.jade . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 617.1. Struktur direktori asli aplikasi ExpressJS . . . . . . . . . . . . . . . . . . . 647.2. Struktur direktori ExpressJS sesuai pola MVC . . . . . . . . . . . . . . . 647.3. app.js . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 657.4. controllers/user.js . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 657.5. models/db.js . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 667.6. package.json . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 668.1. package.json . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 718.2. Isi direktori dist di socket.io-client . . . . . . . . . . . . . . . . . . . . . . 728.3. app.js . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 728.4. views/index.jade . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 738.5. routes/index.js . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 738.6. Menjalankan server Socket.io . . . . . . . . . . . . . . . . . . . . . . . . . 738.7. Kode sumber di browser . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74A.1. Bad curly braces placement - 1 . . . . . . . . . . . . . . . . . . . . . . . . 79A.2. Good curly braces placement - 1 . . . . . . . . . . . . . . . . . . . . . . . 79A.3. Bad curly braces placement - 2 . . . . . . . . . . . . . . . . . . . . . . . . 79A.4. Good curly braces placement - 2 . . . . . . . . . . . . . . . . . . . . . . . 79A.5. Good semicolon usage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80A.6. Comma first . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80B.1. Commit history . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
  11. 11. Daftar Tabelx
  12. 12. BAB 1Pengenalan Cloud Computing dan Infrastruktur Pengembangan AplikasiBerbasis Node.js1.1. Apa itu Cloud Computing?Cloud Computing, atau sering diterjemahkan sebagai “Komputasi Awan” dalam bahasaIndonesia mempunyai berbagai definisi:Wikipedia: penggunaan sumber daya komputasi (peranti keras dan peranti lunak)yang berfungsi untuk memberikan layanan melalui suatu jaringan (pada umumnyaInternet)1.NIST2: model yang memungkinkan akses jaringan ubiquitous (dari mana saja),nyaman, on-demand (saat ada permintaan) ke sekumpulan sumber daya komputasiyang dikonfigurasi untuk berbagi (jaringan, server, penyimpanan, dan berbagailayanan lain) yang dapat dengan cepat ditetapkan dan dirilis dengan usaha yangminimal dari manajemen ataupun interaksi dengan penyedia layanan3.Jika diwujudkan secara visual, Cloud Computing bisa dilihat pada Gambar 1.141.2. Karakteristik Cloud ComputingMenurut NIST, ada beberapa karakteristik dari Cloud Computing:1http://en.wikipedia.org/wiki/Cloud_computing2The National Institute of Standards and Technology3http://csrc.nist.gov/publications/PubsSPs.html#800-1454Gambar dibuat oleh Sam Johnston, diambil dari http://en.wikipedia.org/w/index.php?title=File:Cloud_computing.svg&page=11
  13. 13. 1.2. Karakteristik Cloud Computing 2Gambar 1.1.: Model Cloud ComputingOn-demand self-service: layanan bisa diperoleh pada saat diminta, tanpa inter-vensi atau interaksi manusia di sisi penyedia jasa.Broad network access: tersedia melalui jaringan dengan berbagai peranti yangumum (komputer, tablet, HP, dan lain-lain)Resource pooling: sumber daya komputasi dari penyedia jasa terkumpul untukmelayani.Rapid elasticity: skalabilitas.Measured service: penggunaan sumber daya bisa diukur, di-monitor, dikenda-likan, dan dilaporkan.Karakteristik lain yang tidak kalah penting adalah multitenancy. Multitenancy meru-pakan suatu prinsip dalam arsitektur software. Pada arsitektur tersebut, satu instan darisoftware berjalan pada server, melayani banyak organisasi klien. Aplikasi dirancang un-tuk mempartisi data dan konfigurasinya secara virtual dan setiap organisasi klien tersebut
  14. 14. 1.3. Public dan Private Cloud Computing 3bekerja dengan instan aplikasi virtual tersebut5.1.3. Public dan Private Cloud ComputingCloud Computing bisa dibangun untuk keperluan pribadi suatu organisasi dan (secaralegal) hanya bisa diakses oleh organisasi yang bersangkutan. Tipe tersebut dikenal den-gan Private Cloud Computing. Sementara itu, jika sumber daya Cloud Computing bisadiakses oleh publik (dengan hak akses yang sesuai), maka model tersebut dikenal se-bagai Public Cloud Computing. Pembahasan di buku ini adalah pembahasan tentangPublic Cloud Computing dan semua referensi tentang Cloud Computing di buku ini akanmenunjuk pada Public Cloud Computing kecuali dinyatakan lain.1.4. Model Layanan Cloud ComputingModel layanan pada Cloud Computing akan berkembang sesuai kebutuhan konsumenserta inovasi dari berbagai penyedia layanan. Saat ini, pada umumnya, ada tiga modellayanan:SaaS (Software as a Service): layanan berupa aplikasi yang ditempatkan padainfrastruktur penyedia layanan, siap digunakan oleh konsumen.PaaS (Platform as a Service): menyediakan layanan ke konsumen berupa platformuntuk men-deploy aplikasi.IaaS (Infrastructure as a Service): menyediakan layanan ke konsumen berupaberbagai sumber daya komputasi (pemrosesam, penyimpanan, jaringan, dan sum-ber daya fundamental lainnya).Meski sampai saat ini, umumnya terdapat tiga model tersebut, beberapa model keli-hatannya sudah mulai muncul, misalnya STaaS (Storage as a Service), SECaaS (Securityas a Service), DaaS (Data as a Service), TEaaS (Test Environment as a Service), DesktopVirtualization, APIaaS (API as a Service).1.5. Pengembangan Aplikasi di Cloud ComputingPada umumnya, para pengembang aplikasi di Cloud Computing juga menggunakan pen-dekatan Agile Software Development yang berbasis pada pengembangan secara iteratifuntuk setiap milestone (dalam iterasi analisis-desain-coding-testing-debugging) mulai darimilestone paling awal sampai software dirilis. Perbedaan paling mendasar hanyalah padaplatform yang digunakan untuk deployment, peranti pengembangan yang digunakan,serta utilitas untuk mengelola aplikasi yang di-deploy pada instan di cloud.Pengembangan aplikasi di Cloud Computing akan melibatkan peranti pengembangyang didukung oleh infrastruktur Cloud. Kita akan memerlukan PaaS untuk keperluanini. Pada dasarnya pengembangan aplikasi akan meliputi siklus berikut:5http://en.wikipedia.org/wiki/Multitenancy
  15. 15. 1.6. Node.js dan Cloud Computing 4CodingTest di komputer lokalUpload ke server (dalam Cloud Computing, proses ini diistilahkan dengan “push”Edit - pushJika pengembangan aplikasi dilakukan oleh tim, maka perlu adanya software untukversion control, misalnya Git, mercurial, dan lain-lain. Setelah itu, aktivitas yang di-lakukan biasanya terpusat pada push (untuk mengupload instan dari aplikasi ke server)dan pull (untuk mengambil instan aplikasi dari server).1.6. Node.js dan Cloud ComputingNode.js merupakan salah satu peranti pengembang yang bisa digunakan untuk membuataplikasi berbasis Cloud. Node.js dikembangkan dari engine JavaScript yang dibuat olehGoogle untuk browser Chrome / Chromium (V8) ditambah dengan libUV serta beberapapustaka internal lainnya. Dengan menggunakan Node.js, semua pengembangan akandilakukan menggunakan JavaScript, baik pada sisi klien maupun server. Node.js dibuatpertama kali oleh Ryan Dahl (twitter.com/ryah) dan sampai saat ini dikembangkan olehkomunitas sebagai software bebas dengan pendanaan utama dari Joyent, perusahaantempat Ryan Dahl bekerja.1.7. Layanan Hosting Aplikasi: CloudFoundrySaat ini, mulai banyak penyedia layanan Cloud yang mendukung Node.js, diantaranyaadalah CloudFoundry (http://www.cloudfoundry.com, selanjutnya akan kita sebut den-gan CF). Buku ini akan menggunakan fasilitas dari CF. Daftar lengkap dari penye-dia infrastruktur Node.js bisa dilihat pada https://github.com/joyent/node/wiki/Node-Hosting.1.7.1. PendaftaranUntuk menggunakan fasilitas dari CF, kita akan mendaftar lebih dahulu di URL https://my.cloudfoundry.com/signup sepert yang terlihat pada Gambar 1.2.Setelah itu, CF akan mengirimkan pemberitahuan bahwa proses pendaftaran selesaiseperti di Gambar 1.3. Credentials atau informasi tentang akun kita di CF akan dikir-imkan ke e-mail kita seperti pada Gambar 1.4.1.7.2. Instalasi Command Line UtilitiesCommand Line Utilities / CLU) adalah software yang dijalankan melalui shell / com-mand line / command prompt. CLU untuk CF ini dibuat dengan menggunakan Rubydan didistribusikan dalam bentuk gem sehingga untuk instalasi ini diperlukan ruby danrubygem. Berikut adalah perintah untuk instalasi vmc (CLU dari CF).
  16. 16. 1.7. Layanan Hosting Aplikasi: CloudFoundry 5Gambar 1.2.: Pendaftaran di CF1 $ gem search vmc −−remote | grep "bvmc s "2 vmc ( 0 . 5 . 0 )3 $ gem i n s t a l l vmc4 Fetching : json_pure −1.7.7.gem (100%)5 WARNING: You don ’ t have /home/bpdp /. gem/ruby / 2 . 0 . 0 / bin in your PATH,6 gem executables w i l l not run .7 S u c c e s s f u l l y i n s t a l l e d json_pure −1.7.78 Fetching : multi_json −1.7.2.gem (100%)9 S u c c e s s f u l l y i n s t a l l e d multi_json −1.7.210 Fetching : interact −0.5.2.gem (100%)11 S u c c e s s f u l l y i n s t a l l e d interact −0.5.212 Fetching : multipart−post −1.2.0.gem (100%)13 S u c c e s s f u l l y i n s t a l l e d multipart−post −1.2.014 Fetching : rubyzip −0.9.9.gem (100%)15 S u c c e s s f u l l y i n s t a l l e d rubyzip −0.9.916 Fetching : cf−uaa−lib −1.3.10.gem (100%)17 S u c c e s s f u l l y i n s t a l l e d cf−uaa−lib −1.3.1018 Fetching : cfoundry −0.5.2.gem (100%)19 S u c c e s s f u l l y i n s t a l l e d cfoundry −0.5.220 Fetching : clouseau −0.0.2.gem (100%)21 S u c c e s s f u l l y i n s t a l l e d clouseau −0.0.222 Fetching : mothership −0.5.1.gem (100%)23 S u c c e s s f u l l y i n s t a l l e d mothership −0.5.124 Fetching : manifests −vmc−plugin −0.6.2.gem (100%)25 S u c c e s s f u l l y i n s t a l l e d manifests −vmc−plugin −0.6.226 Fetching : addressable −2.3.4.gem (100%)27 S u c c e s s f u l l y i n s t a l l e d addressable −2.3.4
  17. 17. 1.7. Layanan Hosting Aplikasi: CloudFoundry 6Gambar 1.3.: Hasil proses pendaftaran di CF28 Fetching : caldecott −c l i e n t −0.0.2.gem (100%)29 S u c c e s s f u l l y i n s t a l l e d caldecott −c l i e n t −0.0.230 Fetching : mime−types −1.23.gem (100%)31 S u c c e s s f u l l y i n s t a l l e d mime−types −1.2332 Fetching : rest −c l i e n t −1.6.7.gem (100%)33 S u c c e s s f u l l y i n s t a l l e d rest −c l i e n t −1.6.734 Fetching : uuidtools −2.1.4.gem (100%)35 S u c c e s s f u l l y i n s t a l l e d uuidtools −2.1.436 Fetching : tunnel−vmc−plugin −0.2.2.gem (100%)37 S u c c e s s f u l l y i n s t a l l e d tunnel−vmc−plugin −0.2.238 Fetching : vmc−0.5.0.gem (100%)39 S u c c e s s f u l l y i n s t a l l e d vmc−0.5.040 Parsing documentation for json_pure −1.7.741 I n s t a l l i n g r i documentation for json_pure −1.7.742 Parsing documentation for multi_json −1.7.243 I n s t a l l i n g r i documentation for multi_json −1.7.244 Parsing documentation for interact −0.5.245 I n s t a l l i n g r i documentation for interact −0.5.246 Parsing documentation for multipart−post −1.2.047 I n s t a l l i n g r i documentation for multipart−post −1.2.048 Parsing documentation for rubyzip −0.9.949 I n s t a l l i n g r i documentation for rubyzip −0.9.950 Parsing documentation for cf−uaa−lib −1.3.1051 I n s t a l l i n g r i documentation for cf−uaa−lib −1.3.1052 Parsing documentation for cfoundry −0.5.253 I n s t a l l i n g r i documentation for cfoundry −0.5.254 Parsing documentation for clouseau −0.0.255 I n s t a l l i n g r i documentation for clouseau −0.0.256 Parsing documentation for mothership −0.5.157 I n s t a l l i n g r i documentation for mothership −0.5.158 Parsing documentation for manifests −vmc−plugin −0.6.2
  18. 18. 1.7. Layanan Hosting Aplikasi: CloudFoundry 7Gambar 1.4.: E-mail persetujuan dan pemberitahuan credentials59 I n s t a l l i n g r i documentation for manifests −vmc−plugin −0.6.260 Parsing documentation for addressable −2.3.461 I n s t a l l i n g r i documentation for addressable −2.3.462 Parsing documentation for caldecott −c l i e n t −0.0.263 I n s t a l l i n g r i documentation for caldecott −c l i e n t −0.0.264 Parsing documentation for mime−types −1.2365 I n s t a l l i n g r i documentation for mime−types −1.2366 Parsing documentation for rest −c l i e n t −1.6.767 I n s t a l l i n g r i documentation for rest −c l i e n t −1.6.768 Parsing documentation for uuidtools −2.1.469 I n s t a l l i n g r i documentation for uuidtools −2.1.470 Parsing documentation for tunnel−vmc−plugin −0.2.271 I n s t a l l i n g r i documentation for tunnel−vmc−plugin −0.2.272 Parsing documentation for vmc−0.5.073 I n s t a l l i n g r i documentation for vmc−0.5.074 Done i n s t a l l i n g documentation for json_pure , multi_json ,75 interact , multipart−post , rubyzip , cf−uaa−lib , cfoundry ,76 clouseau , mothership , manifests −vmc−plugin , addressable ,77 caldecott −c l i e n t , mime−types , rest −c l i e n t , uuidtools ,78 tunnel−vmc−plugin , vmc (13 sec ) .79 17 gems i n s t a l l e d80 $
  19. 19. 1.7. Layanan Hosting Aplikasi: CloudFoundry 8Listing 1.1: Instalasi vmcPesan peringatan berikut ini:1 WARNING: You don ’ t have /home/bpdp /. gem/ruby / 2 . 0 . 0 / bin in your PATH,2 gem executables w i l l not run .Listing 1.2: Peringatan setting PATH untuk vmcterjadi karena path untuk executable script Ruby yang diinstall oleh vmc belum dita-mbahkan ke variabel lingkungan PATH. Edit file $HOME/.bashrc dan tambahkan barisberikut6:1 export PATH=$PATH:/ home/bpdp /. gem/ruby / 2 . 0 . 0 / binListing 1.3: Peringatan setting PATH untuk vmcSetelah itu, ketikkan di shell prompt Bash: source ˜/.bashrc7.Hasil dari instalasi vmc adalah sebagai berikut:1 $ gem l i s t23 ∗∗∗ LOCAL GEMS ∗∗∗45 addressable ( 2 . 3 . 4 )6 bigdecimal ( 1 . 2 . 0 )7 caldecott −c l i e n t ( 0 . 0 . 2 )8 cf−uaa−l i b ( 1 . 3 . 1 0 )9 cfoundry ( 0 . 5 . 2 )10 clouseau ( 0 . 0 . 2 )11 i n t e r a c t ( 0 . 5 . 2 )12 io−console ( 0 . 4 . 2 )13 json ( 1 . 7 . 7 )14 json_pure ( 1 . 7 . 7 )15 manifests −vmc−plugin ( 0 . 6 . 2 )16 mime−types ( 1 . 2 3 )17 minitest ( 4 . 3 . 2 )18 mothership ( 0 . 5 . 1 )19 multi_json ( 1 . 7 . 2 )20 multipart−post ( 1 . 2 . 0 )21 psych ( 2 . 0 . 0 )22 rake ( 0 . 9 . 6 )23 rdoc ( 4 . 0 . 0 )24 rest −c l i e n t ( 1 . 6 . 7 )25 rubyzip ( 0 . 9 . 9 )26 test−unit ( 2 . 0 . 0 . 0 )27 tunnel−vmc−plugin ( 0 . 2 . 2 )28 uuidtools ( 2 . 1 . 4 )29 vmc ( 0 . 5 . 0 )30 $Listing 1.4: Hasil gem yang terinstallPeriksa dengan menjalankan opsi help dari vmc:6Catatan: "/home/bpdp/" adalah direktori $HOME saya, silahkan sesuaikan dengan tempat anda7Ini hanya untuk keperluan saat ini saja, setelah ini tidak perlu lagi karena setiap login sudah akandibaca oleh Bash
  20. 20. 1.7. Layanan Hosting Aplikasi: CloudFoundry 91 $ vmc help2 Showing basic command set . Run with ’ help −−a l l ’ to l i s t a l l commands .34 Getting Started5 target [URL] Set or display the target cloud , organization , and space6 logout Log out from the target7 l o g i n [EMAIL] Authenticate with the target8 i n f o Display information on the current target , user , etc .910 Applications11 app [APP] Show app information12 apps L i s t your a p p l i c a t i o n s1314 Management15 s t a r t APPS . . . Start an a p p l i c a t i o n16 d e l e t e APPS . . . Delete an a p p l i c a t i o n17 push [NAME] Push an application , syncing changes i f i t e x i s t s18 r e s t a r t APPS . . . Stop and s t a r t an a p p l i c a t i o n19 stop APPS . . . Stop an a p p l i c a t i o n2021 S e r v i c e s22 s e r v i c e SERVICE Show s e r v i c e information23 s e r v i c e s L i s t your s e r v i c e2425 Management26 delete −s e r v i c e [SERVICE] Delete a s e r v i c e27 bind−s e r v i c e [SERVICE] [APP] Bind a s e r v i c e to an a p p l i c a t i o n28 create −s e r v i c e [OFFERING] [NAME] Create a s e r v i c e29 unbind−s e r v i c e [SERVICE] [APP] Unbind a s e r v i c e from an a p p l i c a t i o n30 tunnel [INSTANCE] [CLIENT] Create a local tunnel to a s e r v i c e .3132 Organizations33 org [ORGANIZATION] Show organization information34 delete −org [ORGANIZATION] Delete an organization35 orgs L i s t a v a i l a b l e o r g a n i z a t i o n s36 create −org [NAME] Create an organization3738 Spaces39 delete −space SPACES . . . Delete a space and i t s contents40 spaces [ORGANIZATION] L i s t spaces in an organization41 create −space [NAME] [ORGANIZATION] Create a space in an organization42 space [SPACE] Show space information4344 Routes45 routes L i s t routes in a space4647 Domains48 domains [SPACE] L i s t domains in a space49 map−domain NAME Map a domain to an organization or space50 unmap−domain DOMAIN Unmap a domain from an organization or space5152 Options :53 −−[no−] c o l o r Use c o l o r f u l output54 −−[no−] s c r i p t Shortcut for −−quiet and −−f o r c e55 −−debug Print f u l l stack trace ( instead of crash log )56 −V, −−verbose Print extra information57 −f , −−[no−] f o r c e Skip i n t e r a c t i o n when p o s s i b l e58 −h , −−help Show command usage59 −m, −−manifest FILE Path to manifest f i l e to use60 −q , −−[no−] quiet Simplify output format61 −t , −−trace Show API t r a f f i c
  21. 21. 1.7. Layanan Hosting Aplikasi: CloudFoundry 1062 −u , −−proxy EMAIL Run t h i s command as another user ( admin )63 −v , −−version Print version number64 $Listing 1.5: Hasil opsi help dari vmc1.7.3. Konfigurasi di Server CloudPada dasarnya, yang diperlukan hanyalah mengubah target ke server cloud dari CF dankemudian mengubah password.1 $ vmc target2 NoMethodError : undefined method ‘ target ’ for n i l : NilClass3 For more information , see ~/.vmc/ crash4 $Listing 1.6: Mengubah target server - belum ada konfigurasiError di atas terjadi karena file konfigurasi belum dibuat. File konfigurasi tersim-pan di direktori $HOME/.vmc. Mengubah target dilakukan dengan membuat file targetdi direktori tersebut. Isi dari file target tersebut adalah server CloudFoundry, yaituhttps://api.cloudfoundry.com. Setelah itu, jika dieksekusi lagi, hasilnya adalah sebagaiberikut:1 $ vmc target2 target : https :// api . cloudfoundry . com3 $Listing 1.7: Mengubah target server - setelah konfigurasiSetelah itu, setiap kali kita akan melakukan berbagai proses yang melibatkan serverini, kita harus melakukan proses login terlebih dahulu:1 $ vmc l o g i n2 target : https :// api . cloudfoundry . com34 Email> bambangpdp@yahoo . com56 Password> ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗78 Authenticating . . . OK9 $ vmc i n f o −−a l l10 Getting runtimes . . . OK11 Getting frameworks . . . OK12 Getting s e r v i c e s . . . OK1314 VMware’ s Cloud Application Platform1516 target : https :// api . cloudfoundry . com17 version : 0.99918 support : http :// support . cloudfoundry . com1920 user : bambangpdp@yahoo . com2122 runtime d e s c r i p t i o n23 java 1 . 6 . 0 _2424 java7 1 . 7 . 0 _04
  22. 22. 1.7. Layanan Hosting Aplikasi: CloudFoundry 1125 node 0 . 4 . 1 226 node06 0 . 6 . 827 node08 0 . 8 . 228 ruby18 1 . 8 . 7 p35729 ruby19 1 . 9 . 2 p1803031 framework d e s c r i p t i o n32 g r a i l s33 java_web34 l i f t35 node36 play37 rack38 r a i l s 339 s i n a t r a40 spring41 standalone4243 s e r v i c e version provider d e s c r i p t i o n44 mongodb 2.0 core MongoDB NoSQL database45 mysql 5.1 core MySQL database46 p o s t g r e s q l 9.0 core PostgreSQL database ( vFabric )47 rabbitmq 2.4 core RabbitMQ message queue48 r e d i s 2.4 core Redis key−value s t o r e49 r e d i s 2.2 core Redis key−value s t o r e50 r e d i s 2.6 core Redis key−value s t o r e51 $525354 $ vmc l o g i n55 target : https :// api . cloudfoundry . com5657 Email> bambangpdp@yahoo . com5859 Password> ∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗6061 Authenticating . . . OK6263 $ vmc i n f o −−a l l64 Getting runtimes . . . OK65 Getting frameworks . . . OK66 Getting s e r v i c e s . . . OK6768 VMware’ s Cloud Application Platform6970 target : https :// api . cloudfoundry . com71 version : 0.99972 support : http :// support . cloudfoundry . com7374 user : bambangpdp@yahoo . com7576 runtime d e s c r i p t i o n77 java 1 . 6 . 0 _2478 java7 1 . 7 . 0 _0479 node 0 . 4 . 1 280 node06 0 . 6 . 881 node08 0 . 8 . 282 ruby18 1 . 8 . 7 p35783 ruby19 1 . 9 . 2 p1808485 framework d e s c r i p t i o n86 g r a i l s
  23. 23. 1.7. Layanan Hosting Aplikasi: CloudFoundry 1287 java_web88 l i f t89 node90 play91 rack92 r a i l s 393 s i n a t r a94 spring95 standalone9697 s e r v i c e version provider d e s c r i p t i o n98 mongodb 2.0 core MongoDB NoSQL database99 mysql 5.1 core MySQL database100 p o s t g r e s q l 9.0 core PostgreSQL database ( vFabric )101 rabbitmq 2.4 core RabbitMQ message queue102 r e d i s 2.4 core Redis key−value s t o r e103 r e d i s 2.6 core Redis key−value s t o r e104 r e d i s 2.2 core Redis key−value s t o r e105 $Listing 1.8: Login ke serverUntuk mengubah password:1 $ vmc passwd2 New Password> ∗∗∗∗∗∗∗∗∗∗∗∗∗∗34 Verify Password> ∗∗∗∗∗∗∗∗∗∗∗∗∗∗56 Your password strength i s : good7 Changing password . . . OK8 $Listing 1.9: Mengubah password server1.7.4. Instalasi dan Konfigurasi Node.js di Komputer LokalNode.js tersedia untuk Linux, Windows, Mac OS X, serta SunOS. Untuk versi Linux,kebanyakan distro sudah menyertakan paket Node.js, hanya saja ada banyak versi dariNode.js dan jika kita menggunakan manajemen paket dari distro Linux, kita hanya bisamenginstall 1 versi saja. Sebagai contoh, di Arch Linux, paket Node.js bisa diinstalldengan perintah “pacman -S nodejs” tetapi hanya pada versi resmi di repo Arch Linux(versi 0.10.5 pada tanggal 6 Mei 2013).Langkah instalasi berikut ini adalah langkah untuk instalasi tanpa manajemen paketdari distro Linux.Ambil paket binary executable dari http://nodejs/download atau langsung kehttp://nodejs.org/dist/. Versi yang digunakan disini adalah 0.10.5. Downloadfile tersebut, kemudian simpan di direktori tertentu (terserah anda, dibuku inidiletakkan di $HOME/master/nodejs).1 20:30:31 −bpdp@bpdp−arch :~/ master / nodejs$ l s2 t o t a l 46723 drwxr−xr−x 2 bpdp bpdp 4096 Apr 26 20:37 .4 drwxr−xr−x 46 bpdp bpdp 4096 May 4 23:33 . .5 −rw−r−−r−− 1 bpdp bpdp 4770726 Apr 24 03:34 node−v0 .10.5 − linux−x86 . tar . gz
  24. 24. 1.8. Pengelolaan Aplikasi di Cloud 136 20:30:31 −bpdp@bpdp−arch :~/ master / nodejs$Listing 1.10: Hasil dari download Node.jsEkstrak ke direktori yang diinginkan. Node.js akan diinstall di direktori $HOME-/software:1 $ cd2 $ cd software3 $ tar −xzvf ~/master / nodejs /node−v0 .10.5 − linux−x86 . tar . gz4 $ ln −s node−v0 .10.5 − linux−x86 nodejs5 $ l s −la6 . . . .7 . . . .8 lrwxrwxrwx 1 bpdp bpdp 22 May 1 07:58 nodejs −> node−v0 .10.5 − linux−x869 drwxr−xr−x 5 bpdp bpdp 4096 Apr 24 03:31 node−v0 .10.5 − linux−x8610 . . . .11 . . . .12 $Listing 1.11: Ekstraksi Node.jsKonfigurasi variabel lingkungan. Sebaiknya disimpan pada suatu file (pada bukuini, konfigurasi akan disimpan di $HOME/environment/nodejs):1 NODEJS_HOME=/home/bpdp/ software / nodejs23 PATH=$PATH:$NODEJS_HOME/ bin4 MANPATH=$MANPATH:$NODEJS_HOME/ share /man5 LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$NODEJS_HOME/ l i b6 C_INCLUDE_PATH=$C_INCLUDE_PATH:$NODEJS_HOME/ include7 CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:$NODEJS_HOME/ include89 export PATH10 export MANPATH11 export LD_LIBRARY_PATH12 export C_INCLUDE_PATH13 export CPLUS_INCLUDE_PATHListing 1.12: Konfigurasi variabel lingkungan Node.jsSetiap akan menggunakan Node.js, yang diperlukan adalah men-source file konfig-urasi tersebut: source ˜/environment/nodejs.1.8. Pengelolaan Aplikasi di CloudAplikasi yang dibuat nantinya akan di-deploy ke server CF. Pada umumnya, developerakan melakukan proses untuk upload (push), menghapus (delete), serta memperbaharui(update) aplikasi di server. Jika belum memahami sintaksis JavaScript serta penggunaannpm, jangan kuatir. Tujuan dari bab ini hanya mengenalkan pengelolaan aplikasi diCloud. Aspek lainnya akan dibahas di bab-bab berikutnya.
  25. 25. 1.8. Pengelolaan Aplikasi di Cloud 141.8.1. Push, Delete, Update AplikasiPada pembahasan ini, akan diberikan contoh menggunakan dua kategori, yaitu den-gan menggunakan framework (ExpressJS - http://expressjs.com) serta tanpa meng-gunakan framework.1.8.2. Menggunakan Framework ExpressJS1 $ npm i n s t a l l −g expressListing 1.13: Instalasi ExpressJS menggunakan npmJika berhasil, maka kita bisa menggunakan perintah express untuk membuat rerangkaaplikasi. Sintaksis penggunaan ExpressJS adalah sebagai berikut:1 $ express −−help23 Usage : express [ options ]45 Options :67 −h , −−help output usage information8 −V, −−version output the version number9 −s , −−s e s s i o n s add s e s s i o n support10 −e , −−e j s add e j s engine support ( d e f a u l t s to jade )11 −J , −−jshtml add jshtml engine support ( d e f a u l t s to jade )12 −H, −−hogan add hogan . j s engine support13 −c , −−c ss <engine> add s t y l e s h e e t <engine> support ( l e s s | s t y l u s ) ( d e f a u l t s to plain c ss )14 −f , −−f o r c e f o r c e on non−empty d i r e c t o r y1516 $Listing 1.14: Perintah expressSetelah itu, kita bisa membuat rerangka aplikasi ExpressJS dengan cara berikut:1 $ mkdir h e l l o2 $ cd h e l l o3 $ express45 create : .6 create : ./ package . json7 create : ./ app . j s8 create : ./ public9 create : ./ public / j a v a s c r i p t s10 create : ./ routes11 create : ./ routes / index . j s12 create : ./ routes / user . j s13 create : ./ public / s t y l e s h e e t s14 create : ./ public / s t y l e s h e e t s / s t y l e . c ss15 create : ./ views16 create : ./ views / layout . jade17 create : ./ views / index . jade18 create : ./ public / images1920 i n s t a l l dependencies :21 $ cd . && npm i n s t a l l2223 run the app :
  26. 26. 1.8. Pengelolaan Aplikasi di Cloud 1524 $ node app2526 $Listing 1.15: Menggunakan express untuk membuat rerangka aplikasiPada rerangka aplikasi tersebut, terdapat file package.json untuk mendefinisikan ap-likasi serta dependensi-nya dan app.js yang merupakan file utama untuk dijalankan padaserver.1 {2 "name" : "hello -node" ,3 "version" : "0.0.1" ,4 "private" : true ,5 "scripts" : {6 "start" : "node app.js"7 } ,8 " dependencies " : {9 "express" : "3.2.2" ,10 "jade" : "*"11 }12 }Listing 1.16: package.json untuk ExpressJSa12 /**3 * Module dependencies .4 */56 var express = r e q u i r e ( ’express ’)7 , routes = r e q u i r e ( ’./ routes ’)8 , user = r e q u i r e ( ’./ routes/user ’)9 , http = r e q u i r e ( ’http ’)10 , path = r e q u i r e ( ’path ’ ) ;1112 var app = express ( ) ;1314 // all environments15 app . s e t ( ’port ’ , process . env .PORT | | 3000);16 app . s e t ( ’views ’ , __dirname + ’/views ’ ) ;17 app . s e t ( ’view engine ’ , ’jade ’ ) ;18 app . use ( express . favicon ( ) ) ;19 app . use ( express . logger ( ’dev ’ ) ) ;20 app . use ( express . bodyParser ( ) ) ;21 app . use ( express . methodOverride ( ) ) ;22 app . use ( app . router ) ;23 app . use ( express . s t a t i c ( path . j o i n (__dirname , ’public ’ ) ) ) ;2425 // development only26 i f ( ’development ’ == app . get ( ’env ’ )) {27 app . use ( express . errorHandler ( ) ) ;28 }2930 app . get ( ’/’ , routes . index ) ;31 app . get ( ’/users ’ , user . l i s t ) ;3233 http . crea teServer ( app ) . l i s t e n ( app . get ( ’port ’ ) , function (){34 console . log ( ’Express server listening on port ’ + app . get ( ’port ’ ) ) ;
  27. 27. 1.8. Pengelolaan Aplikasi di Cloud 1635 } ) ;Listing 1.17: app.js untuk ExpressJSEdit file routes/index.js sebagai berikut:12 /*3 * GET home page.4 */56 exports . index = function ( req , r e s ){7 r e s . render ( ’index ’ , { t i t l e : ’Express app at CloudFoundry ’ } ) ;8 };Listing 1.18: Hasil edit routes/index.jsSetelah itu, install modul-modul yang diperlukan dengan perintah npm install padadirektori tersebut. npm akan membaca file package.json kemudian menginstall modul-modul sesuai dengan deskripsi pada dependencies. Setelah diuji pada komputer lokal den-gan perintah node app.js, dan sukses bisa diakses di browser dengan alamat http://localhost:3000,maka aplikasi tersebut bisa di-deploy di CloudFoundry. Proses deployment digambarkansebagai berikut (anda sudah harus login menggunakan perintah vmc login sebelumnya)dan berada di direktori tempat aplikasi tersebut berada:1 $ vmc push2 Name> bpdp−hello −express34 Instances > 156 1: node7 2: other8 Framework> node910 1: node11 2: node0612 3: node0813 4: other14 Runtime> 31516 1: 64M17 2: 128M18 3: 256M19 4: 512M20 5: 1G21 6: 2G22 Memory Limit> 64M2324 Creating bpdp−hello −express . . . OK2526 1: bpdp−hello −express . cloudfoundry . com27 2: none28 Domain> bpdp−hello −express . cloudfoundry . com2930 Updating bpdp−hello −express . . . OK3132 Create s e r v i c e s for a p p l i c a t i o n?> n3334 Save c o n f i g u r a t i o n?> n35
  28. 28. 1.8. Pengelolaan Aplikasi di Cloud 17Gambar 1.5.: Hasil push ke server36 Uploading bpdp−hello −express . . . OK37 Starting bpdp−hello −express . . . OK38 Checking bpdp−hello −express . . .39 1/1 i n s t a n c e s : 1 running40 OK41 $Listing 1.19: Deployment aplikasi ExpressJS ke CFHasilnya terlihat pada tampilan browser di Gambar 1.5Aplikasi yang sudah dibuat seringkali diubah, oleh karena itu vmc juga menyediakanfasilitas untuk Mengupdate aplikasi.12 /*3 * GET home page.4 */56 exports . index = function ( req , r e s ){7 var nv = process . version ;8 r e s . render ( ’index ’ , { t i t l e : ’Express app at CloudFoundry with Node.js ’ + nv } ) ;9 };Listing 1.20: Update: menambahkan versi Node.js ke routes/index.js1 $ vmc apps2 Getting a p p l i c a t i o n s . . . OK34 name status usage runtime u r l5 hello −express running 1 x 64M node08 bpdp−hello −express . cloudfoundry . com6 $ vmc push hello −express7 Uploading hello −express . . . OK8 Stopping hello −express . . . OK910 Starting hello −express . . . OK11 Checking hello −express . . . OK12 $Listing 1.21: Mengupdate aplikasi di serverHasilnya bisa dilihat di Gambar 1.6Untuk menghapus aplikasi:1 $ vmc d e l e t e bpdp−m1−hellonoframework2 Really d e l e t e bpdp−m1−hellonoframework?> y3
  29. 29. 1.8. Pengelolaan Aplikasi di Cloud 18Gambar 1.6.: Hasil update dengan menyertakan versi Node.js4 Deleting bpdp−m1−hellonoframework . . . OK56 $Listing 1.22: Menghapus aplikasi yang di-deploy di CFPada saat deployment, kita juga bisa memilih versi Node.js (runtime) sebagai berikut:1 $ vmc push −−runtime=node082 Name> bpdp−hello −express0634 Instances > 156 1: node7 2: other8 Framework> node910 1: 64M11 2: 128M12 3: 256M13 4: 512M14 5: 1G15 Memory Limit> 64M1617 Creating bpdp−hello −express06 . . . OK1819 1: bpdp−hello −express06 . cloudfoundry . com20 2: none21 URL> bpdp−hello −express06 . cloudfoundry . com2223 Updating bpdp−hello −express06 . . . OK2425 Create s e r v i c e s for a p p l i c a t i o n?> n2627 Save c o n f i g u r a t i o n?> n2829 Uploading bpdp−hello −express06 . . . OK30 Starting bpdp−hello −express06 . . . OK31 Checking bpdp−hello −express06 . . . OK32 $Listing 1.23: Deployment ke CF dengan memilih runtime Node.jsHasilnya bisa dilihat di Gambar 1.7
  30. 30. 1.8. Pengelolaan Aplikasi di Cloud 19Gambar 1.7.: Deployment menggunakan versi runtime tertentu1.8.3. Tanpa FrameworkTanpa framework, yang kita perlukan hanyalah langsung mem-push file yang kita buat(dalam contoh ini adalah app.js):1 var http = r e q u i r e ( ’http ’ ) ;2 var u r l = r e q u i r e ( "url" ) ;34 http . crea teServer ( function ( req , r e s ) {56 var pathname = u r l . parse ( req . u r l ) . pathname ;78 r e s . writeHead (200 , {’Content -Type ’ : ’text/html ’ } ) ;9 r e s . write ( "Hello NodeJS <u>" + process . version + " </u>" ) ;10 r e s . write ( "<br />Request for <b>" + pathname + " </b> received." ) ;11 r e s . end ( ) ;1213 } ) . l i s t e n ( 1 3 3 7 ) ;Listing 1.24: app.js tanpa frameworkProses deployement adalah sebagai berikut:1 $ vmc push2 Name> hello −noframework34 Instances > 156 1: node7 2: other8 Framework> node910 1: node11 2: node0612 3: node0813 4: other14 Runtime> 31516 1: 64M17 2: 128M18 3: 256M19 4: 512M20 5: 1G21 Memory Limit> 64M2223 Creating hello −noframework . . . OK2425 1: hello −noframework . cloudfoundry . com
  31. 31. 1.8. Pengelolaan Aplikasi di Cloud 20Gambar 1.8.: Hasil deployement app.js tanpa framework26 2: none27 URL> hello −noframework . cloudfoundry . com2829 Updating hello −noframework . . . OK3031 Create s e r v i c e s for a p p l i c a t i o n?> n3233 Save c o n f i g u r a t i o n?> n3435 Uploading hello −noframework . . . OK36 Starting hello −noframework . . . OK37 Checking hello −noframework . . . OK38 $Listing 1.25: Deployment app.js tanpa frameworkHasilnya bisa dilihat pada Gambar 1.8
  32. 32. BAB 2REPL dan Dasar-dasar JavaScript di Node.js2.1. REPLREPL adalah lingkungan pemrograman interaktif, tempat developer bisa mengetikkanprogram per baris dan langsung mengeksekusi hasilnya. Biasanya ini digunakan un-tuk menguji perintah-perintah yang cukup dijalankan pada satu baris atau satu bloksegmen kode sumber saja. Karena fungsinya itu, maka istilah yang digunakan adalahREPL (read-eval-print-loop), yaitu loop atau perulangan baca perintah - evaluasi per-intah - tampilkan hasil. REPL sering juga disebut sebagai interactive top level ataulanguage shell. “Tradisi” ini sudah dimulai sejak jaman LISP di mesin UNIX di era awalpengembangan development tools. Saat ini hampir semua interpreter/compiler mempun-yai REPL, misalnya Python, Ruby, Scala, PHP, berbagai interpreter/compiler LISP, dantidak ketinggalan Node.js.2.1.1. Mengaktifkan REPLUntuk mengaktifkan REPL dari Node.js, executable command line program-nya adalahnode. Jika node dipanggil dengan argumen nama file JavaScript, maka file JavaScripttersebut akan dieksekusi, sementara jika tanpa argumen, akan masuk ke REPL:1 $ node2 > . help3 . break Sometimes you get stuck , t h i s gets you out4 . c l e a r Alias for . break5 . exit Exit the r e p l6 . help Show r e p l options7 . load Load JS from a f i l e into the REPL s e s s i o n8 . save Save a l l evaluated commands in t h i s REPL s e s s i o n to a f i l e9 >Listing 2.1: Node.js REPL21
  33. 33. 2.1. REPL 22Tanda “>” adalah tanda bahwa REPL Node.js siap untuk menerima perintah. Untukmelihat perintah-perintah REPL, bisa digunakan .help.2.1.2. Perintah-perintah REPLPada sesi REPL, kita bisa memberikan perintah internal REPL maupun perintah-perintahlain yang sesuai dan dikenali sebagai perintah JavaScript. Perintah internal REPLNode.js terdiri atas:.break: keluar dan melepaskan diri dari "keruwetan" baris perintah di REPL..clear: alias untuk .break.exit: keluar dari sesi REPL (bisa juga dengan menggunakan Ctrl-D).help: menampilkan pertolong perintah internal REPL.load: membaca dan mengeksekusi perintah-perintah JavaScript yang terdapatpada suatu file..save: menyimpan sesi REPL ke dalam suatu file.Contoh untuk .load:1 $ node2 > . load /home/bpdp/ kerjaan / s r c / j a v a s c r i p t / nodejs / h e l l o . j s3 > var http = r e q u i r e ( ’http ’ ) ;4 undefined5 > http . createServer ( function ( req , r e s ) {6 . . . r e s . writeHead (200 , {’Content -Type ’ : ’text/plain ’ } ) ;7 . . . r e s . end ( ’Hello Worldn’ ) ;8 . . . } ) . l i s t e n (1337 , ’127.0.0.1 ’ ) ;9 { domain : null ,10 _events :11 { request : [ Function ] ,12 connection : [ Function : connectionListener ] ,13 c l i e n t E r r o r : [ Function ] } ,14 _maxListeners : 10 ,15 _connections : 0 ,16 connections : [ Getter / Setter ] ,17 _handle : null ,18 _usingSlaves : false ,19 _slaves : [ ] ,20 allowHalfOpen : true ,21 httpAllowHalfOpen : false ,22 timeout : 120000 }23 > console . log ( ’Server running at http ://127.0.0.1:1337/ ’ ) ;24 Server running at http : // 127.0.0.1:1337/25 undefined26 >Listing 2.2: Contoh penggunaan .load dalam REPLSetelah keluar dari sesi REPL, maka port akan ditutup dan hasil eksekusi di atas akandibatalkan.Untuk menyimpan hasil sesi REPL menggunakan .save, jika tanpa menyebutkan di-rektori, maka akan disimpan di direktori aktif saat itu. Contoh:
  34. 34. 2.2. Dasar-dasar JavaScript di Node.js 231 $ node2 > console . log ( "Selamat datang di Node.js" )3 Selamat datang di Node . j s4 undefined5 > . save /home/bpdp/ kerjaan / s r c / j a v a s c r i p t / nodejs /welcome . j s6 Session saved to :/ home/bpdp/ kerjaan / s r c / j a v a s c r i p t / nodejs /welcome . j s7 > $ cat /home/bpdp/ kerjaan / s r c / j a v a s c r i p t / nodejs /welcome . j s8 console . log ( "Selamat datang di Node.js" )9 $Listing 2.3: Contoh penggunaan perintah .save di sesi REPL2.2. Dasar-dasar JavaScript di Node.jsNode.js merupakan sistem peranti lunak yang merupakan implementasi dari bahasapemrograman JavaScript. Spesifikasi JavaScript yang diimplementasikan merupakanspesifikasi resmi dari ECMAScript serta CommonJS (http://commonjs.org). Dengandemikian, jika anda sudah pernah mempelajari JavaScript sebelumnya, tata bahasa dariperintah yang dipahami oleh Node.js masih tetap sama dengan JavaScript.2.2.1. Membaca Masukan dari Stream / Masukan Standar (stdin)Untuk lebih memahami dasar-dasar JavaScript serta penerapannya di Node.js, seringkalikita perlu melakukan simulasi pertanyaan - proses - keluaran jawaban. Proses akan kitapelajari seiring dengan materi-materi berikutnya, sementara untuk keluaran, kita bisamenggunakan console.log. Bagian ini akan menjelaskan sedikit tentang masukan.Perintah untuk memberi masukan di Node.js sudah tersedia pada pustaka API Read-line1. Pola dari masukan ini adalah sebagai berikut:me-require pustaka Readlinemembuat interface untuk masukan dan keluaran.. gunakan interface .... gunakan interface .... gunakan interface .... gunakan interface ......tutup interface1Lengkapnya bisa diakses di http://nodejs.org/api/readline.html
  35. 35. 2.2. Dasar-dasar JavaScript di Node.js 24Implementasi dari pola diatas bisa dilihat pada kode sumber berikut ini (diambil darimanual Node.js):1 var r e a d l i n e = r e q u i r e ( ’readline ’ ) ;23 var r l = r e a d l i n e . c r e a t e I n t e r f a c e ({4 input : process . stdin ,5 output : process . stdout6 } ) ;78 r l . question ( "What do you think of node.js? " , function ( answer ) {9 console . log ( "Thank you for your valuable feedback:" , answer ) ;10 r l . c l o s e ( ) ;11 } ) ;1213 // hasil:14 // $ node readline.js15 // What do you think of node.js? awesome!16 // Thank you for your valuable feedback: awesome!17 // $Listing 2.4: readline.js: penggunaan pustaka Readline untuk masukanCatatan: function(answer) pada listing di atas merupakan anonymous function ataufungsi anonimus (sering juga disebut lambda function / fungsi lambda. Posisi fungsipada listing tersebut disebut dengan fungsi callback. Untuk keperluan pembahasan saatini, untuk sementara yang perlu dipahami adalah hasil input akan dimasukkan ke an-swer untuk diproses lebih lanjut. Fungsi dan callback akan dibahas lebih lanjut padapembahasan berikutnya.2.2.2. Nilai/Value dan Tipe DataProgram dalam JavaScript akan berhubungan dengan data atau nilai. Setiap nilai mem-punyai tipe tertentu. JavaScript mengenali berbagai tipe berikut ini:Angka: bulat (misalnya 4) atau pecahan (misalnya 3.75)Boolean: nilai benar (true) dan salah (false)String: diapit oleh tanda petik ganda ("contoh string") atau tunggal (’contohstring’)nullundefinedJavaScript adalah bahasa pemrograman yang mengijinkan pemrogram untuk tidakmendefinisikan tipe data pada saat deklarasi, atau sering juga disebut sebagai dynami-cally typed language:
  36. 36. 2.2. Dasar-dasar JavaScript di Node.js 251 var jumlahMahasiswa = 302 console . log ( ’Jumlah mahasiswa dalam satu kelas = ’ + jumlahMahasiswa ) ;3 // Jumlah mahasiswa dalam satu kelas = 30Listing 2.5: Fitur dynamically typed languagePada contoh di atas, kita bisa melihat bahwa data akan dikonversi secara otomatispada saat program dieksekusi.Catatan:Khusus untuk operator "+", JavaScript akan melakukan penggabungan string(string concatenation), tetapi untuk operator lain, akan dilakukan operasi matem-atis sesuai operator tersebut (-,/,*).Konversi string ke tipe numerik bisa dilakukan dengan parseInt(string) (jika bilan-gan bulat) dan parseFloat(string) (jika bilangan pecahan).2.2.3. VariabelVariabel adalah suatu nama yang didefinisikan untuk menampung suatu nilai. Nama iniakan digunakan sebagai referensi yang akan menunjukkan ke nilai yang ditampungnya.Nama variabel disebut dengan identifier / pengenal. Ada beberapa syarat pemberiannama identifier di JavaScript:Dimulai dengan huruf, underscore (_), atau tanda dollar ($).Karakter berikutnya bisa berupa angka, selain ketentuan pertama di atas.Membedakan huruf besar - kecil.Konvensi yang digunakan oleh pemrogram JavaScript terkait dengan penamaan ini adalahvariasi dari metode camel case, yaitu camelBack. Contoh: jumlahMahasiswa, linkMenu,status.2.2.4. KonstantaKonstanta mirip dengan variabel, hanya saja sifatnya read-only, tidak bisa diubah-ubahsetelah ditetapkan. Untuk menetapkan konstanta di JavaScript, digunakan kata kunciconst. Contoh:1 const MENU = "Home" ;23 console . log ( "Posisi menu = " + MENU) ;45 // mencoba mengisi MENU. berhasil?67 MENU = "About" ;8
  37. 37. 2.2. Dasar-dasar JavaScript di Node.js 269 console . log ( "Posisi menu = " + MENU) ;1011 // Posisi menu = Home12 // Posisi menu = HomeListing 2.6: Contoh konstanta dalam JavaScriptKonvensi penamaan konstanta adalah menggunakan huruf besar semua. Bagian ini(sampai saat buku ini ditulis) hanya berlaku di Firefox dan Google Chrome - V8 (artinyaberlaku juga untuk Node.js).2.2.5. FungsiPengertian FungsiFungsi merupakan subprogram atau suatu bagian dari keseluruhan program yang ditu-jukan untuk mengerjakan suatu pekerjaan tertentu dan (biasanya) menghasilkan suatunilai kembalian. Subprogram ini relatif independen terhadap bagian-bagian lain sehinggamemenuhi kaidah "bisa-digunakan-kembali" atau reusable pada beberapa program yangmemerlukan fungsionalitasnya. Fungsi dalam ilmu komputer sering kali juga disebutdengan prcedure, routine, atau method.Definisi FungsiDefinisi fungsi dari JavaScript di Node.js bisa dilakukan dengan sintaksis berikut ini:1 function namaFungsi ( argumen1 , argumen2 , . . . , argumentN ) {2 . .3 JavaScript code . .4 JavaScript code . .5 JavaScript code . .6 JavaScript code . .7 . .8 }Listing 2.7: Sintaksis Fungsi dalam JavaScriptSetelah dideklarasikan, fungsi tersebut bisa dipanggil dengan cara sebagai berikut:1 . .2 . .3 namaFungsi ( argumen1 , argumen2 , . . . , argumenN ) ;4 . .5 . .Listing 2.8: Pemanggilan Fungsi dalam JavaScriptContoh dalam program serta pemanggilannya adalah sebagai berikut:1 $ node2 > function addX( angka ) {3 . . . console . log ( angka + 1 0 ) ;4 . . . }5 undefined6 > addX ( 2 0 ) ;7 30
  38. 38. 2.2. Dasar-dasar JavaScript di Node.js 278 undefined9 >10 > function add2Numbers ( angka1 , angka2 ) {11 . . . return angka1 + angka2 ;12 . . . }13 undefined14 > console . log ( "232 + 432 = " + add2Numbers (232 , 4 3 2 ) ) ;15 232 + 432 = 66416 undefined17 >Listing 2.9: Contoh deklarasi fungsi dan pemanggilannyaFungsi AnonimFungsi anonim adalah fungsi tanpa nama, pemrogram tidak perlu memberikan namake fungsi. Biasanya fungsi anonimus ini hanya digunakan untuk fungsi yang dikerjakanpada suatu bagian program saja dan tidak dengan maksud untuk dijadikan komponenyang bisa dipakai di bagian lain dari program (biasanya untuk menangani event ataucallback). Untuk mendeklarasikan fungsi ini, digunakan literal function.1 var pangkat = function ( angka ) {return angka ∗ angka };2 console . log ( pangkat ( 1 0 ) ) ;3 // output: 100Listing 2.10: Fungsi anonimFungsi RekursifFungsi rekursif adalah fungsi yang memanggil dirinya sendiri. Contoh dari aplikasi fungsirekursif adalah pada penghitungan faktorial berikut:1 function f a c t o r i a l (n) {23 i f (( n == 0) | | (n == 1))4 return 1;5 else6 return (n ∗ f a c t o r i a l (n − 1 ) ) ;78 }910 console . log ( "factorial (6) = " + f a c t o r i a l ( 6 ) ) ;1112 // hasil:13 // factorial (6) = 720Listing 2.11: Fungsi rekursif untuk menghitung faktorialFungsi di dalam Fungsi / Nested FunctionsSaat mendefinisikan fungsi, di dalam fungsi tersebut pemrogram bisa mendefinisikanfungsi lainnya. Meskipun demikian, fungsi yang terletak dalam suatu definisi fungsi tidakbisa diakses dari luar fungsi tersebut dan hanya tersedia untuk fungsi yang didefinisikan.
  39. 39. 2.2. Dasar-dasar JavaScript di Node.js 281 function induk () {23 var awal = 0;4 function tambahkan () {5 awal++;6 }78 tambahkan ( ) ;9 tambahkan ( ) ;1011 console . log ( ’Nilai = ’ + awal ) ;1213 }1415 induk ( ) ;16 tambahkan ( ) ;1718 // hasil:19 // Nilai = 220 //21 // /home/bpdp/kerjaan/git -repos/buku -cloud -nodejs/22 // src/bab -02/ nested.js :1223 // tambahkan ();24 // ^25 // ReferenceError : tambahkan is not defined26 // at Object.<anonymous > (/ home/bpdp/kerjaan/git -repos/27 // buku -cloud -nodejs/src/bab -02/ nested.js :12:1)28 // at Module._compile (module.js :456:26)29 // at Object.Module. _extensions ..js (module.js :474:10)30 // at Module.load (module.js :356:32)31 // at Function.Module._load (module.js :312:12)32 // at Function.Module.runMain (module.js :497:10)33 // at startup (node.js :119:16)34 // at node.js :901:3Listing 2.12: Fungsi di dalam Fungsi2.2.6. LiteralLiteral digunakan untuk merepresentasikan nilai dalam JavaScript. Ada beberapa tipeliteral.Literal ArrayArray atau variabel berindeks adalah penampung untuk obyek yang menyerupai list ataudaftar. Obyek array juga menyediakan berbagai fungsi dan metode untuk mengolahanggota yang terdapat dalam daftar tersebut (terutama untuk operasi traversal danpermutasi. Listing berikut menunjukkan beberapa operasi untuk literal array.1 var arrMembers = [ ’one’ , ’two ’ , , ’three ’ , ] ;2 // sengaja ada koma di bagian akhir3 console . log ( arrMembers [ 0 ] ) ;4 // hasil: one5 console . log ( arrMembers [ 2 ] ) ;6 // hasil: undefined7 console . log ( arrMembers [ 3 ] ) ;8 // hasil: three
  40. 40. 2.2. Dasar-dasar JavaScript di Node.js 299 console . log ( arrMembers [ 4 ] ) ;10 // hasil: undefined - karena tidak ada11 console . log ( arrMembers . length ) ;12 // hasil: 413 var multiArray = [14 [ ’0-0’ , ’0-1’ , ’0-2’ ] ,15 [ ’1-0’ , ’1-1’ , ’1-2’ ] ,16 [ ’2-0’ , ’2-1’ , ’2-2’ ] ] ;17 console . log ( multiArray [ 0 ] [ 2 ] ) ;18 // hasil: 0-219 console . log ( multiArray [ 1 ] [ 2 ] ) ;20 // hasil: 1-2Listing 2.13: Array di JavaScriptLiteral BooleanLiteral boolean menunjukkan nilai benar (true) atau salah (false).Literal IntegerLiteral integer digunakan untuk mengekspresikan nilai bilangan bulat. Nilai bulanganbulat dalam JavaScript bisa dalam bentuk:decimal (basis 10): digit tanpa awalan nol.octal (basis 8): digit diawali dengan 1 angka nol.2hexadecimal (basis 16): digit diawali dengan 0x.Literal Floating-pointLiteral ini digunakan untuk mengekspresikan nilai bilangan pecahan, misalnya 0.4343atau bisa juga menggunakan E/e (nilai eksponensial), misalnya -3.1E12.Literal ObyekLiteral ini akan dibahas di bab yang menjelaskan tentang paradigma pemrograman beror-ientasi obyek di JavaScript.Literal StringLiteral string mengekspresikan suatu nilai dalam bentuk sederetan karakter dan beradadalam tanda petik (ganda/“” maupun tunggal/”). Contoh:“Kembali ke halaman utama”’Lisensi’“Hari ini, Jum’at, tanggal 21 November”2pada ECMA-262, bilangan octal ini sudah tidak digunakan lagi.
  41. 41. 2.2. Dasar-dasar JavaScript di Node.js 30“1234.543”“baris pertama n baris kedua”Contoh terakhir di atas menggunakan karakter khusus (n). Beberapa karakter khususlainnya adalah:b: Backspacef: Form feedn: New liner: Carriage returnt: Tabv: Vertical tab’: Apostrophe atau single quote": Double quote: Backslash ().XXX: Karakter dengan pengkodean Latin-1 dengan tiga digit octal antara 0 and377. (misal, 251 adalah simbol hak cipta).xXX: seperti di atas, tetapi hexadecimal (2 digit).uXXXX: Karakter Unicode dengan 3 digit karakter hexadecimal.Backslash sendiri sering digunakan sebagai escape character, misalnya “NaN seringdisebut juga sebagai ”Not a Number“”.2.2.7. Struktur Data dan Representasi JSONJSON (JavaScript Object Notation) adalah subset dari JavaScript dan merupakan struk-tur data native di JavaScript. Bentuk dari representasi struktur data JSON adalahsebagai berikut3:1 var data = {2 "firstName" : "John" ,3 "lastName" : "Smith" ,4 "age" : 25 ,5 "address" : {6 " streetAddress " : "21 2nd Street" ,7 "city" : "New York" ,8 "state" : "NY" ,9 "postalCode" : "10021"10 } ,3http://en.wikipedia.org/wiki/JSON dengan sedikit perubahan
  42. 42. 2.2. Dasar-dasar JavaScript di Node.js 3111 "phoneNumber " :12 {13 "home" : "212 555 -1234" ,14 "fax" : "646 555 -4567"15 }16 }1718 console . log ( data . firstName + " " + data . lastName +19 " has this phone number = "20 + data . phoneNumber . home ) ;2122 // hasil:23 // John Smith has this phone number = 212 555 -1234Listing 2.14: Representasi JSONDari representasi di atas, kita bisa membaca:Nilai data “firstname” adalah “John”Data “address” terdiri atas sub data “streetAddress”, “city”, “state”, dan “postal-Code” yang masing-masing mempunyai nilai data sendiri-sendiri.dan seterusnya2.2.8. Aliran KendaliAlur program dikendalikan melalui pernyataan-pernyataan untuk aliran kendali. Adabeberapa pernyataan aliran kendali yang akan dibahas.Pernyataan Kondisi if .. else if .. elsePernyataan ini digunakan untuk mengerjakan atau tidak mengerjakan suatu bagian ataublok program berdasarkan hasil evaluasi kondisi tertentu.1 var kondisi = false ;2 i f ( kondisi ) {3 console . log ( ’hanya dikerjakan jika kondisi bernilai benar/true ’ ) ;4 };5 // hasil: n/a, tidak ada hasilnya6 var kondisi = true ;7 i f ( kondisi ) {8 console . log ( ’hanya dikerjakan jika kondisi bernilai benar/true ’ ) ;9 };10 // hasil: hanya dikerjakan jika kondisi bernilai benar/true11 // Contoh berikut lebih kompleks , melibatkan input1213 var r e a d l i n e = r e q u i r e ( ’readline ’ ) ;1415 var r l = r e a d l i n e . c r e a t e I n t e r f a c e ({16 input : process . stdin ,17 output : process . stdout18 } ) ;1920 r l . question ( "Masukkan angka nilai: " , function ( answer ) {21 i f ( answer > 80) {22 console . log ( "Nilai: A" ) ;
  43. 43. 2.2. Dasar-dasar JavaScript di Node.js 3223 } else i f ( answer > 70) {24 console . log ( "Nilai: B" ) ;25 } else i f ( answer > 40) {26 console . log ( "Nilai: C" ) ;27 } else i f ( answer > 30) {28 console . log ( "Nilai: D" ) ;29 } else {30 console . log ( "Tidak lulus" ) ;31 }32 r l . c l o s e ( ) ;33 } ) ;3435 // hasil:36 // hanya dikerjakan jika kondisi bernilai benar/true37 // Masukkan angka nilai: 5038 // Nilai: CListing 2.15: Pernyataan if .. else if .. elsePernyataan switchPernyataan ini digunakan untuk mengevaluasi suatu ekspresi dan membandingkan samaatau tidaknya dengan suatu label tertentu di dalam struktur pernyataan switch, sertamengeksekusi perintah-perintah sesuai dengan label yang cocok.1 var r e a d l i n e = r e q u i r e ( ’readline ’ ) ;23 var r l = r e a d l i n e . c r e a t e I n t e r f a c e ({4 input : process . stdin ,5 output : process . stdout6 } ) ;78 console . log ( "Menu" ) ;9 console . log ( "====" ) ;10 console . log ( "1. Mengisi data" ) ;11 console . log ( "2. Mengedit data" ) ;12 console . log ( "3. Menghapus data" ) ;13 console . log ( "4. Mencari data" ) ;14 r l . question ( "Masukkan angka pilihan anda: " , function ( answer ) {15 console . log ( "Pilihan anda: " + answer ) ;16 switch ( answer ) {17 case "1" :18 console . log ( "Anda memilih menu pengisian data" ) ;19 break ;20 case "2" :21 console . log ( "Anda memilih menu pengeditan data" ) ;22 break ;23 case "3" :24 console . log ( "Anda memilih menu penghapusan data" ) ;25 break ;26 case "4" :27 console . log ( "Anda memilih menu pencarian data" ) ;28 break ;29 d e f a u l t :30 console . log ( "Anda tidak memilih salah satu dari menu di atas" ) ;31 break ;32 }33 r l . c l o s e ( ) ;34 } ) ;35
  44. 44. 2.2. Dasar-dasar JavaScript di Node.js 3336 // hasil:37 // $ node switch.js38 // Menu39 // ====40 // 1. Mengisi data41 // 2. Mengedit data42 // 3. Menghapus data43 // 4. Mencari data44 // Masukkan angka pilihan anda: 1045 // Pilihan anda: 1046 // Anda tidak memilih salah satu dari menu di atas47 // $ node switch.js48 // Menu49 // ====50 // 1. Mengisi data51 // 2. Mengedit data52 // 3. Menghapus data53 // 4. Mencari data54 // Masukkan angka pilihan anda: 255 // Pilihan anda: 256 // Anda memilih menu pengeditan dataListing 2.16: Pernyataan Contoh penggunaan “switch”LoopingLooping atau sering juga disebut “kalang” adalah konstruksi program yang digunakanuntuk melakukan suatu blok perintah secara berulang-ulang.for1 f o r ( var i = 0; i < 9; i++) {2 console . log ( i ) ;3 }45 // hasil:6 // 07 // 18 // 29 // 310 // 411 // 512 // 613 // 714 // 8Listing 2.17: Pernyataan forPernyataan “for” juga bisa digunakan untuk mengakses data yang tersimpam dalamstruktur data JavaScript (JSON).1 var data = {a : 1 , b : 2 , c : 3 } ;23 f o r ( var i t e r a s i in data ) {4 console . log ( "Nilai dari iterasi " + i t e r a s i + " adalah: " + data [ i t e r a s i ] ) ;5 }67 // hasil:8 // Nilai dari iterasi a adalah: 19 // Nilai dari iterasi b adalah: 2
  45. 45. 2.2. Dasar-dasar JavaScript di Node.js 3410 // Nilai dari iterasi c adalah: 3Listing 2.18: Pernyataan for .. indo .. whilePernyataan ini digunakan untuk mengerjakan suatu blok program selama suatu kondisibernilai benar dengan jumlah minimal pengerjaan sebanyak 1 kali.1 var i = 0;2 do {3 i += 2;4 console . log ( i ) ;5 } while ( i < 2 0 ) ;67 // hasil:8 // 29 // 410 // 611 // 812 // 1013 // 1214 // 1415 // 1616 // 1817 // 20Listing 2.19: Pernyataan do .. whilewhileSeperti do .. while, pernyataan ini digunakan untuk mengerjakan suatu blok programsecara berulang-ulang selama kondisi bernilai benar. Meskipun demikian, bisa saja blokprogram tersebut tidak pernah dikerjakan jika pada saat awal expresi dievaluasi sudahbernilai false.1 var n = 0;2 var x = 0;34 while (n < 5) {5 n ++;6 x += n ;7 console . log ( "Nilai n = " + n ) ;8 console . log ( "Nilai x = " + x ) ;9 }1011 // hasil:12 // Nilai n = 113 // Nilai x = 114 // Nilai n = 215 // Nilai x = 316 // Nilai n = 317 // Nilai x = 618 // Nilai n = 419 // Nilai x = 1020 // Nilai n = 521 // Nilai x = 15Listing 2.20: Pernyataan whilelabel, break, dan continueBagian ini digunakan dalam looping dan switch.
  46. 46. 2.2. Dasar-dasar JavaScript di Node.js 35label digunakan untuk memberi pengenal pada suatu lokasi program sehingga bisadireferensi oleh break maupun continue (jika dikehendaki).break digunakan untuk menghentikan eksekusi dan meneruskan alur program kepernyataan setelah looping atau switchcontinue digunakan untuk meneruskan eksekusi ke iterasi atau ke kondisi switchberikutnya.1 var n = 0;2 var x = 0;34 while (n < 5) {5 n ++;6 x += n ;78 i f (x%2 == 0) {9 continue ;10 };1112 i f (x>10) {13 break ;14 };1516 console . log ( "Nilai n = " + n ) ;17 console . log ( "Nilai x = " + x ) ;1819 };20 // hasil:21 // Nilai n = 122 // Nilai x = 123 // Nilai n = 224 // Nilai x = 3Listing 2.21: Pernyataan break dan continue1 topLabel :2 f o r ( var k = 0; k < 10; k++){3 f o r ( var m = 0; m < 20; m++){4 i f (m == 5){5 console . log ( "Nilai k = " + k ) ;6 console . log ( "Nilai m = " + m) ;7 break topLabel ;8 }9 }10 }11 // hasil:12 // Nilai k = 013 // Nilai m = 5Listing 2.22: Pernyataan break dengan label2.2.9. Penanganan ErrorJavaScript mendukung pernyataan try .. catch .. finally serta throw untuk menangani er-ror. Meskipun demikian, banyak hal yang tidak sesuai dengan konstruksi ini karena sifat
  47. 47. 2.2. Dasar-dasar JavaScript di Node.js 36JavaScript yang asynchronous. Untuk kasus asynchrous, pemrogram lebih disarankanmenggunakan function callback.1 try {2 gakAdaFungsiIni ( ) ;3 } catch ( e ) {4 console . log ( "Error: " + e . message ) ;5 } f i n a l l y {6 console . log ( "Bagian ’pembersihan ’, akan dikerjakan , apapun yang terjadi" ) ;7 };89 // hasil:10 // Error: gakAdaFungsiIni is not defined11 // Bagian ’pembersihan ’, akan dikerjakan , apapun yang terjadiListing 2.23: Pernyataan try catch finallyJika diperlukan, kita bisa mendefinisikan sendiri error dengan menggunakan perny-ataan throw.1 try {2 var a = 1/0;3 throw "Pembagian oleh angka 0" ;4 } catch ( e ) {5 console . log ( "Error: " + e ) ;6 };78 // hasil:9 // Error: Pembagian oleh angka 0Listing 2.24: Pernyataan try catch throw
  48. 48. BAB 3Paradigma Pemrograman di JavaScript3.1. Pemrograman FungsionalPemrograman fungsional, atau sering disebut functional programming, selama ini lebihsering dibicarakan di level para akademisi. Meskipun demikian, saat ini terdapat kecen-derungan paradigma ini semakin banyak digunakan di industri. Contoh nyata dari im-plementasi paradigma ini di industri antara lain adalah Scala (http://www.scala-lang.org), OCaml (http://www.ocaml.org), Haskell (http://www.haskell.org), MicrosoftF# (http://fsharp.org), dan lain-lain. Dalam konteks paradigma pemrograman, per-anti lunak yang dibangun menggunakan pendekatan paradigma ini akan terdiri atasberbagai fungsi yang mirip dengan fungsi matematis. Fungsi matematis tersebut di-evaluasi dengan penekanan pada penghindaran state serta mutable data. Bandingkandengan paradigma pemrograman prosedural yang menekankan pada immutable data dandefinisi berbagai prosedur dan fungsi untuk mengubah state serta data.JavaScript bukan merupakan bahasa pemrograman fungsional yang murni, tetapi adabanyak fitur dari pemrograman fungsional yang terdapat dalam JavaScript. Dalam halini, JavaScript banyak dipengaruhi oleh bahasa pemrograman Scheme (http://www.schemers.org/). Bab ini akan membahas beberapa fitur pemrograman fungsional diJavaScript. Pembahasan ini didasari pembahasan di bab sebelumnya tentang Fungsi diJavaScript.3.1.1. Ekspresi LambdaEkspresi lambda / lambda expression merupakan hasil karya dari ALonzo Church sekitartahun 1930-an. Aplikasi dari konsep ini di dalam pemrograman adalah penggunaanfungsi sebagai parameter untuk suatu fungsi. Dalam pemrograman, lambda functionsering juga disebut sebagai fungsi anonimus (fungsi yang dipanggil/dieksekusi tanpa37
  49. 49. 3.1. Pemrograman Fungsional 38ditautkan (bound) ke suatu identifier). Berikut adalah implementasi dari konsep ini diJavaSCript:1 // Diambil dari2 // http :// stackoverflow .com/questions /3865335/ what -is -a-lambda -language3 // dengan beberapa perubahan45 function applyOperation (a , b , operation ) {6 return operation (a , b ) ;7 }89 function add (a , b) {10 return a+b ;11 }1213 function subtract (a , b) {14 return a−b ;15 }1617 console . log ( ’1,2, add: ’ + applyOperation (1 ,2 , add ) ) ;18 console . log ( ’43,21, subtract: ’ + applyOperation (43 ,21 , subtract ) ) ;1920 console . log ( ’4^3: ’ + applyOperation (4 , 3 , function (a , b) {return Math . pow(a , b ) } ) )2122 // hasil:23 // 1,2, add: 324 // 43,21, subtract: 2225 // 4^3: 64Listing 3.1: Ekspresi Lambda di JavaScript3.1.2. Higher-order FunctionHigher-order function (sering disebut juga sebagai functor adalah suatu fungsi yangsetidak-tidaknya menggunakan satu atau lebih fungsi lain sebagai parameter dari fungsi,atau menghasilkan fungsi sebagai nilai kembalian.1 function forEach ( array , action ) {2 f o r ( var i = 0; i < array . length ; i++ )3 action ( array [ i ] ) ;4 }56 function print ( word ) {7 console . log ( word ) ;8 }910 function makeUpperCase ( word ) {11 console . log ( word . toUpperCase ( ) ) ;12 }1314 forEach ( [ "satu" , "dua" , "tiga" ] , print ) ;15 forEach ( [ "satu" , "dua" , "tiga" ] , makeUpperCase ) ;1617 // hasil:18 // satu19 //dua20 // tiga21 // SATU22 //DUA
  50. 50. 3.1. Pemrograman Fungsional 3923 // TIGAListing 3.2: Higher-order Function di JavaScript3.1.3. ClosureSuatu closure merupakan definisi suatu fungsi bersama-sama dengan lingkungannya.Lingkungan tersebut terdiri atas fungsi internal serta berbagai variabel lokal yang masihtetap tersedia saat fungsi utama / closure tersebut selesai dieksekusi.1 // Diambil dengan sedikit perubahan dari:2 // https :// developer.mozilla.org/en -US/docs/JavaScript/Guide/Closures3 function makeAdder (x ) {4 return function (y ) {5 return x + y ;6 };7 }89 var add5 = makeAdder ( 5 ) ;10 var add10 = makeAdder ( 1 0 ) ;1112 console . log ( add5 ( 2 ) ) ; // 713 console . log ( add10 ( 2 ) ) ; // 12Listing 3.3: Closure di JavaScript3.1.4. CurryingCurrying memungkinkan pemrogram untuk membuat suatu fungsi dengan cara menggu-nakan fungsi yang sudah tersedia secara parsial, artinya tidak perlu menggunakan semuaargumen dari fungsi yang sudah tersedia tersebut.1 // Diambil dari:2 // http :// javascriptweblog .wordpress.com /2010/04/05/3 // curry -cooking -up -tastier -functions/4 // dengan sedikit perubahan56 function toArray (fromEnum) {7 return Array . prototype . s l i c e . c a l l (fromEnum ) ;8 }910 Function . prototype . curry = function () {11 i f ( arguments . length <1) {12 return this ; // nothing to curry with - return function13 }14 var __method = this ;15 var args = toArray ( arguments ) ;16 return function () {17 return __method . apply ( this , args . concat ( toArray ( arguments ) ) ) ;18 }19 }2021 var add = function (a , b) {22 return a + b ;23 }2425 // create function that returns 10 + argument
  51. 51. 3.2. Pemrograman Berorientasi Obyek 4026 var addTen = add . curry ( 1 0 ) ;27 console . log ( addTen ( 2 0 ) ) ; //30Listing 3.4: Currying di JavaScript3.2. Pemrograman Berorientasi Obyek3.2.1. PengertianPemrograman Berorientasi Obyek (selanjutnya akan disingkat PBO) adalah suatu paradigmapemrograman yang memandang bahwa pemecahan masalah pemrograman akan dilakukanmelalui definisi berbagai kelas kemudian membuat berbagai obyek berdasarkan kelas yngdibuat tersebut dan setelah itu mendefinisikan interaksi antar obyek tersebut dalammemecahkan masalah pemrograman. Obyek bisa saling berinteraksi karena setiap obyekmempunyai properti (sifat / karakteristik) dan method untuk mengerjakan suatu peker-jaan tertentu. Jadi, bisa dikatakan bahwa paradigma ini menggunakan cara pandangyang manusiawi dalam penyelesaian masalah.Dengan demikian, inti dari PBO sebenarnya terletak pada kemampuan untuk mengab-straksikan berbagai obyek ke dalam kelas (yang terdiri atas properti serta method).Paradigma PBO biasanya juga mencakup inheritance atau pewarisan (sehingga terben-tuk skema yang terdiri atas superclass dan subclass). Ciri lainnya adalah polymorphismdan encapsulation / pengkapsulan.JavaScript adalah bahasa pemrograman yang mendukung PBO dan merupakan im-plementasi dari ECMAScript. Implementasi PBO di JavaScript adalah prototype-basedprogramming yang merupakan salah satu subset dari PBO. Pada prototype-based pro-gramming, kelas / class tidak ada. Pewarisan diimplementasikan melalui prototype.3.2.2. Definisi ObyekDefinisi obyek dilakukan dengan menggunakan definisi function, sementara this digu-nakan di dalam definisi untuk menunjukkan ke obyek tersebut. Sementara itu, Ke-las.prototype.namaMethod digunakan untuk mendefinisikan method dengan nama methodnamaMethod pada kelas Kelas. Perhatikan contoh pada listing berikut.1 var u r l = r e q u i r e ( ’url’ ) ;23 // Definisi obyek4 function Halaman( alamatUrl ) {5 this . u r l = alamatUrl ;6 console . log ( "Mengakses alamat " + alamatUrl ) ;7 }89 Halaman . prototype . getDomainName = function () {10 return u r l . parse ( this . url , true ) . host ;11 }12 // sampai disini definisi obyek13 // Halaman.prototype. getDomainName => menetapkan method getDomainName14 // untuk obyek1516 var halSatu = new Halaman( "http :// nodejs.org/api/http.html" ) ;
  52. 52. 3.2. Pemrograman Berorientasi Obyek 4117 var halDua = new Halaman( "http :// bpdp.name/login?fromHome" ) ;1819 console . log ( "Alamat URL yang diakses oleh halSatu = " + halSatu . u r l ) ;20 console . log ( "Alamat URL yang diakses oleh halDua = " + halDua . u r l ) ;2122 console . log ( "Nama domain halDua = " + halDua . getDomainName ( ) ) ;2324 // hasil:25 // Mengakses alamat http :// nodejs.org/api/http.html26 // Mengakses alamat http :// bpdp.name/login?fromHome27 // Alamat URL yang diakses oleh halSatu = http :// nodejs.org/api/http.html28 // Alamat URL yang diakses oleh halDua = http :// bpdp.name/login?fromHome29 // Nama domain halDua = bpdp.nameListing 3.5: Definisi obyek di JavaScript3.2.3. Inheritance / PewarisanPewarisan di JavaScript bisa dicapai menggunakan prototype. Listing program berikutmemperlihatkan bagaimana pewarisan diimplementasikan di JavaScript.1 // Definisi obyek2 function Kelas ( param ) {3 this . property1 = new String ( param ) ;4 }56 Kelas . prototype . methodSatu = function () {7 return this . property1 ;8 }910 var kelasSatu = new Kelas ( "ini parameter 1 dari kelas 1" ) ;1112 console . log ( "Property 1 dari kelasSatu = " + kelasSatu . property1 ) ;13 console . log ( "Property 1 dari kelasSatu , diambil dari method = " + kelasSatu . methodSatu ( ) ) ;1415 // Definisi inheritance:16 // SubKelas merupakan anak dari Kelas yang didefinisikan17 // di atas.1819 SubKelas . prototype = new Kelas ( ) ;20 SubKelas . prototype . constructor = SubKelas ;2122 function SubKelas ( param ) {23 this . property1 = new String ( param ) ;24 }2526 // method overriding27 SubKelas . prototype . methodSatu = function ( keHurufBesar ) {28 console . log ( "Ubah ke huruf besar? = " + keHurufBesar ) ;29 i f ( keHurufBesar ) {30 return this . property1 . toUpperCase ( ) ;31 } else {32 return this . property1 . toLowerCase ( ) ;33 }34 }3536 SubKelas . prototype . methodDua = function () {37 console . log ( "Berada di method dua dari SubKelas" ) ;38 }39
  53. 53. 3.2. Pemrograman Berorientasi Obyek 4240 // mari diuji41 var subKelasSatu = new SubKelas ( "Parameter 1 Dari Sub Kelas 1" ) ;4243 console . log ( "Property 1 dari sub kelas 1 = " + subKelasSatu . property1 ) ;44 console . log ( "Property 1 dari sub kelas 1, dr method+param = " + subKelasSatu . methodSatu ( true ) ) ;45 console . log ( "Property 1 dari sub kelas 1, dr method+param = " + subKelasSatu . methodSatu ( false ) ) ;4647 console . log ( subKelasSatu . methodDua ( ) ) ;48 // hasil:49 //50 // Property 1 dari kelasSatu = ini parameter 1 dari kelas 151 // Property 1 dari kelasSatu , diambil dari method = ini52 // parameter 1 dari kelas 153 // Property 1 dari sub kelas 1 = Parameter 1 Dari Sub Kelas 154 // Ubah ke huruf besar? = true55 // Property 1 dari sub kelas 1, dr method+param =56 // PARAMETER 1 DARI SUB KELAS 157 // Ubah ke huruf besar? = false58 // Property 1 dari sub kelas 1, dr method+param =59 // parameter 1 dari sub kelas 160 // Berada di method dua dari SubKelasListing 3.6: Pewarisan di PBO JavaScript
  54. 54. BAB 4Mengelola Paket Menggunakan npm4.1. Apakah npm Itu?Node.js memungkinkan developer untuk mengembangkan aplikasi secara modular denganmemisahkan berbagai komponen reusable code ke dalam pustaka (library). Berbagaipustaka tersebut bisa diperoleh di http://npmjs.org. Node.js menyediakan perintahnpm untuk mengelola paket pustaka di repositori tersebut. Untuk menggunakan utilitasini, pemrogram harus terkoneksi dengan Internet.4.2. Menggunakan npmSaat melakukan instalasi Node.js, secara otomatis npm akan disertakan. Dengan perin-tah npm tersebut, seorang pemrogram bisa mengelola pustaka yang tersedia di reposi-tori. Jika pemrogram mempunya pustakan yang bisa digunakan oleh orang lain, makapemrogram yang bersangkutan juga bisa menyimpan pustaka tersebut ke dalam reposi-tori sehingga memungkinkan untuk diinstall oleh pemrogram-pemrogram lain di seluruhdunia. Sintaksis lengkap dari penggunaan perintah npm ini adalah sebagai berikut1:1 $ npm −−help23 Usage : npm <command>45 where <command> i s one of :6 add−user , adduser , apihelp , author , bin , bugs , c , cache ,7 completion , config , ddp , dedupe , deprecate , docs , edit ,8 explore , faq , find , find −dupes , get , help , help−search ,9 home , i , info , i n i t , i n s t a l l , i s n t a l l , i s s u e s , la , link ,10 l i s t , l l , ln , login , ls , outdated , owner , pack , prefix ,11 prune , publish , r , rb , rebuild , remove , r e s t a r t , rm , root ,12 run−s c r i p t , s , se , search , set , show , shrinkwrap , star ,1beberapa bagian tertulis spesifik lokasi direktori di komputer yang digunakan penulis43
  55. 55. 4.2. Menggunakan npm 4413 stars , start , stop , submodule , tag , test , tst , un ,14 u n i n s t a l l , unlink , unpublish , unstar , up , update , version ,15 view , whoami1617 npm <cmd> −h quick help on <cmd>18 npm −l display f u l l usage i n f o19 npm faq commonly asked questions20 npm help <term> search for help on <term>21 npm help npm involved overview2223 Specify c o n f i g s in the ini −formatted f i l e :24 /home/bpdp /. npmrc25 or on the command l i n e via : npm <command> −−key value26 Config i n f o can be viewed via : npm help c o n f i g2728 npm@1. 2 . 1 8 /home/bpdp/ software /node−v0 .10.5 − linux−x86/ l i b /node_modules/npmListing 4.1: Sintaksis lengkap perintah npmPada bagian berikut, kita akan membahas lebih lanjut penggunaan perintah npm terse-but.4.2.1. Instalasi Paketnpm sebenarnya bukan merupakan singkatan dari Node Package Manager, meskipunseringkali orang menterjemahkan dengan singkatan tersebut dan npm seharusnya ditulisdalam huruf kecil semua seperti yang dijelaskan pada FAQ (Frequently Asked Questions)2.npm merupakan bilah alat berbasis baris perintah, dijalankan melalui shell atau commandprompt. Sama seperti kebanyakan bilah alat berbasis baris perintah lain, npm memilikistruktur perintah npm perintah argumen. Installasi paket pustaka dilakukan denganperintah berikut :1 $ npm i n s t a l l namapaketListing 4.2: Cara install paket menggunakan npmPerintah diatas akan memasang versi terakhir dari paket “namapaket”. Selain itu npmjuga dapat memasang paket langsung pada sebuah folder, tarball atau tautan untuksebuah tarball.4.2.2. Struktur Instalasi Paket Node.jsDalam installasi paket pustaka, berkas-berkas akan terletak dalam folder lokal aplikasinode_modules. Pada mode installasi paket pustaka global (dengan -g atau –globaldibelakang baris perintah), paket pustaka akan dipasang pada /usr/lib/node_modules(dengan lokasi installasi Node.js standar). Mode global memungkinkan paket pustakadigunakan tanpa memasang paket pustaka pada setiap folder lokal aplikasi. Mode globalini juga membutuhkan hak administrasi lebih (sudo atau root) dari pengguna agar dapatmenulis pada lokasi standar.2https://npmjs.org/doc/faq.html
  56. 56. 4.2. Menggunakan npm 45Jika berada pada direktori $HOME, maka paket-paket npm tersebut akan terinstall di$HOME/.npm, sedangkan jika kita berada di luar direktori $HOME, maka paket-pakettersebut akan terinstall di $CWD/node_modules ($CWD = Current Working Directory -direktori aktif saat ini). Daftar paket pustaka yang terpasang dapat dilihat menggunakanperintah berikut:1 $ npm l s2 −−> untuk melihat pada $CWD3 atau4 $ npm l s −g5 −−> untuk melihat pada d i r e k t o r i globa lListing 4.3: Argumen npm untuk melihat daftar paket terpasangSelain melihat daftar paket pustaka yang digunakan dalam aplikasi maupun global,perintah diatas juga akan menampilkan paket dependensi dalam struktur pohon. Jikakita belum menginstall paket-paket yang diperlukan, akan muncul peringatan. Berikutini adalah contoh peringatan dari paket-paket yang belum terinstall di aplikasi hello-express saat mengerjakan perintah “npm ls” di direktori tempat aplikasi tersebut berada(lihat bab 1):1 $ npm l s2 npm WARN package . json hello@0 . 0 . 1 No README.md f i l e found !3 hello@0 . 0 . 1 /home/bpdp/ kerjaan / git −repos /buku−cloud−nodejs / s r c /bab−01/ h e l l o4 +−− UNMET DEPENDENCY express 3 . 2 . 25 +−− UNMET DEPENDENCY jade ∗67 npm ERR! missing : express@3 . 2 . 2 , required by hello@0 . 0 . 18 npm ERR! missing : jade@ ∗ , required by hello@0 . 0 . 19 npm ERR! not ok code 010 $Listing 4.4: npm ls pada aplikasi yang paket-paketnya belum terinstallJika sudah terinstall, perintah “npm ls” akan menampilkan struktur dari paket yangtelah terinstall dalam bentuk struktur pohon seperti pada Gambar 4.1.4.2.3. Menghapus Paket / UninstallMenghapus paket pustaka menggunakan npm pada dasarnya hampir sama dengan saatmemasang paket, namun dengan perintah uninstall. Berikut perintah lengkapnya.1 $ npm u n i n s t a l l namapaket2 −−> u n i n s t a l l namapaket di $CWD/node_modules3 atau4 $ npm u n i n s t a l l namapaket −g5 −−> u n i n s t a l l paket di d i r glo balListing 4.5: Perintah menghapus paket di npm4.2.4. Mencari PaketUntuk mencari paket, gunakan argumen search dan nama atau bagian dari nama paketyang dicari. Contoh berikut ini akan mencari paket dengan kata kunci ’sha512’ (tampilanberikut merupakan tampilan yang terpotong):

×