Jika Anda belum tahu, DiskDB adalah sebuah sistem file berbasis database. Hanya ada satu alasan kenapa menggunakan DiskDB yaitu untuk menghindari penggunaan MongoDB dalam pengelolaan Rest App dalam skala kecil.

TodoApp yang akan dibangun tampak seperti ini :

Home

CompleteTask

EditTask

Kenapa DiskDB ?

Banyak sekali aplikasi di luar sana yang memiliki beberapa collection di dalam Database dan juga beberapa REST. Aplikasi-aplikasi tersebut melakukan Create, Read, Update dan Delete yang lebih dikenal dengan CRUD terhadap beberapa record antar collection. Menggunakan MongoDB untuk aplikasi seperti ini dianggap terlalu berlebihan.

DiskDB menyimpan data dalam sebuah format JSON. Anda tidak usah khawatir dalam menggunakan DB service jika ingin memindahkan aplikasi ke public karena data akan disimpan dalam file pada folder yang sudah Anda konfigurasi.

Mari kita coba mulai menggunakan DiskDB.

Memulai DiskDB

Untuk mendapatkan pengetahuan dasar, berikut ada beberapa contoh serta penjelasannya. Buat sebuah folder dan beri nama myDiskDBApp, kemudian bukan terminal dan jalankan :

npm init

yaitu untuk inisialisasi Node project. Sekarang install diskdb sebagai dependency nya dengan menjalankan :

npm install diskdb --save

Buat sebuah folder baru di dalam root project (myDiskDBApp) dengan nama mydb, kemudian buat juga file app.js yang disimpan pada root project dan tambahkan kode berikut dalam app.js:


var db = require('diskdb');
db = db.connect('mydb', ['fruits']);

Baris 1 – Require DiskDB
Baris 2 – Connect ke folder mydb untuk mencari file yang namanya fruits. Jika file tidak ditemukan, maka secara otomatis akan membuat file JSON baru untuk Anda.
Sekarang, ayo tambahkan “fruit” sebagai collection.

// add a fruit
var apple = {
	name : 'apple',
	qty : 3
};
 
db.fruits.save(apple);

Seperti MongoDB, Anda dapat mengakses collection menggunakan namanya dan memanggil method-method API.
Untuk menjalankan aplikasi, pada teriminal ketikkan:

$ node app.js

Anda juga bisa menambahkan beberapa collection bersamaan :

var fruits = [{
  name: 'pineapple',
  qty: 5
}, {
  name: 'banana',
  qty: 8
}, {
  name: 'pear',
  qty: 1
}]
 
db.fruits.save(fruits);

Sederhana bukan? Anda juga bisa melakukan query terhadap collection menggunakan find() atau findOne().

File app.js sampai tahap ini :

var db = require('diskdb');
db = db.connect('mydb', ['fruits']);
 
// add a fruit
var apple = {
  name: 'apple',
  qty: 3
};
 
db.fruits.save(apple);
 
var fruits = [{
  name: 'pineapple',
  qty: 5
}, {
  name: 'banana',
  qty: 8
}, {
  name: 'pear',
  qty: 1
}]
 
db.fruits.save(fruits);
 
console.log(db.fruits.find()); // will return all the fruits
console.log(db.fruits.find({name : 'apple'})); // will return all the fruits with name as apple
 
console.log(db.fruits.findOne()); // will return the first fruits
console.log(db.fruits.find({name : 'apple'})); // will return the first fruits with name as apple

Kira-kira outputnya seperti ini :
diskdb
Setelah melihat beberapa contoh sederhana penggunaan DiskDB diatas, mungkin sudah bisa kita coba untuk membangun TodoApp nya.

Membangun Todo App

Sekarang, Anda sudah memiliki pengetahuan dasar tentang DiskDB. Ayo bangun Todo App sederhana menggunakan DiskDB sebagai persistence layer.
Clone/Download project dari repo berikut. Buka terminal, pada direktori folder yang sudah di download jalankan :

npm install

Langkah tersebut untuk menginstall semua dependency yang di butuhkan. Selanjutnya kita akan uninstall mongojs dari dependency dengan cara :

npm uninstall mongojs --save

Selanjutnya install diskdb dengan cara :

npm install diskdb --save

Sekarang, kita akan membuat sebuat folder baru di dalam folder server dengan nama db. Folder ini adalah tempat kita akan menyimpan Todo collection.
Sekarang, buka server/routes/index.js dan update seperti ini :

(function() {
 
  'use strict';
  var express = require('express');
  var router = express.Router();
  var db = require('diskdb');
  db = db.connect('server/db', ['todos']);
 
  /* GET home page. */
  router.get('/', function(req, res) {
    res.render('index');
  });
 
  router.get('/api/todos', function(req, res) {
    res.json(db.todos.find());
  });
 
  router.post('/api/todos', function(req, res) {
    res.json(db.todos.save(req.body));
  });
 
  router.put('/api/todos', function(req, res) {
    res.json(db.todos.update({
      _id: req.body._id
    }, {
      isCompleted: req.body.isCompleted,
      todo: req.body.todo
    }));
  });
 
  router.delete('/api/todos/:_id', function(req, res) {
    res.json(db.todos.remove({
      _id: req.params._id
    }));
  });
 
  module.exports = router;
 
}());

Itu dia..!! Sekarang backend nya sudah menggunakan DiskDB.
Saat menggunakan DiskDB, response untuk fungsi update sedikit berbeda sehingga kita butuh untuk mengubah file /client/js/controllers.js.
Replace baris 34 dan baris 51 dengan :

if (data.data.updatedExisting)
if (data.data.updated > 0 || data.data.inserted > 0)

Simpan semua file dan jalankan :

gulp

dan buka browser dengan address http://localhost:3000 untuk melihat perubahan code.
Anda bisa meng-check /server/db/todos.json untuk melihat perubahan data JSON yang sedang di update.

Sederhana dan mudah bukan!!

Keep Learn and Have fun Coding !!

Advertisements