Noval's Blog

Blog pribadi Noval

Sabtu, 29 Desember 2018

Tutorial CRUD REST API menggunakan Node.js, Express.js dan MongoDB Bahasa Indonesia (Part 2)

Assalamu'alaikum warahmatullahi wabarakatuh.

Hai, jangan lupa ngopi. 

Sebelum kita lanjut, pastikan dulu MongoDB nya berjalan yaa. Kemudian masuk kedalam folder projectnya 'expressapp' tadi dan install mongoose dengan kode berikut : 

~$ npm install mongoose

Perhatikan ya, itu huruf 'o' nya dua hehehe

Memulai Membuat CRUD ExpressJS dan MongoDB

1. C - CREATE

Sesuai dengan urutannya, kita akan membuatnya mulai dari Create. Buka kembali file app.js dan tambahkan script berikut : 

const mongoose = require("mongoose");

server.use(express.urlencoded({ extended: true }));
server.use(express.json());

mongoose.connect("mongodb://localhost:27017/expressapp");

Sedikit penjelasan
1. 'mongoose.connect' itu bertujuan untuk menghubungkan expressjs nya dengan mongodb, bagi agan yang biasa pakai MySQL pasti tau dengan mysql_connect atau mysqli_connect
2. dua baris 'server.use' itu berfungsi untuk menerima inputan dari form-urlencoded, nanti agan akan lihat dimana itu berfungsi
3. Perlu agan ketahui, databasenya akan otomatis terbuat berdasarkan mongoose.connect dan dalam kasus ini nama databasenye expressapp yaitu dari ("...27017/expressapp")

Bikin folder baru dengan nama models kemudian di dalamnya file book.models.js 

const mongoose = require("mongoose");

var bookSchema = new mongoose.Schema(
  {
    title: {
      type: String,
      required: true
    },
    genre: String,
    penulis: String
  },
  { timestamps: true }
);

var Book = mongoose.model("books", bookSchema);
module.exports = Book;

Model ini yang akan berhubungan dengan MongoDB nya, oo iya kita juga tidak perlu membuat Collections atau dalam MySQL biasa dikenal sebagai table. Berdasarkan Model ini lah kita akan menentukan nama collection dan juga field-field nya

Nama collection : books -> berdasarkan mongoose.model("books", ...)
PrimaryKey : _id -> otomatis dibuat oleh MongoDB sendiri
Field nya : title, genre, penulis, timestamps(created_at, updated_at)

Selanjutnya buka lagi book.controller.js dan tambahkan script berikut

  //Ini sudah ada sebelumnya
  getBooks: function(req, res) {
    res.send("Hello, ini dari getBooks Noval!");
  },

  //Ini yang kita tambahkan
  createBook: function(req, res) {
    Book.create({
      title: req.body.title,
      genre: req.body.genre,
      penulis: req.body.penulis
    })
      .then(function(result) {
        res.status(201).json(result);
      })
      .catch(function(error) {
        res.status(500).json(error);
      });
  },

Penjelasan :
1. Untuk membuat data, kita menggunakan Book.create
2. title yang bagian kiri ini harus sesuai dengan yang ada pada model <- title: req.body.title -> dan title ini berasal dari name pada form kita nanti
3. Disini kita menggunakan promises yaitu then dan catch. Yang mana then akan dijalankan bila hasilnya true, dan catch bisa hasilnya false
4. status(201) : response created, masih banyak response lain seperti 500(error), 404(not found), 200(OK) dll

Pada file routes.js tambahkan

//di bawah routes.get("/")
routes.post("/create", books.createBook);

Nahh sudah siap dijalankan lagi, Pastikan kalian sudah dalam folder projectnya ya.

~$ nodemon app.js

Ohh iya, kalo sebelumnya sudah dijalankan, kita tidak perlu lagi menjalankan ulang, karna nodemon sudah mengahandle dan otomatis menjalankan ulang jika ada perubahan code.

Sekarang buka tool untuk menguji API, bisa menggunakan postman atau insomnia, dan saya menggunakan Insomnia

Lalu udah method nya menjadi POST dan url : http://localhost:3000/create
Pilih Form URL Encoded 

Tutorial-CRUD-REST-API-menggunakan-Node.js-Express.js-dan-MongoDB-Bahasa-Indonesia

Selanjutnya isi name dan value seperti pada gambar, lalu klik Send

Tutorial-CRUD-REST-API-menggunakan-Node.js-Express.js-dan-MongoDB-Bahasa-Indonesia

Dan inilah hasilnya, sesuai dengan response yang kita beri yaitu 201

Tutorial-CRUD-REST-API-menggunakan-Node.js-Express.js-dan-MongoDB-Bahasa-Indonesia

2. R - READ

Yap selanjutnya kita akan mengambil data nya. Buka file book.controller.js dan ganti code dalam function getBooks menjadi seperti berikut 

  getBooks: function(req, res) {
    Book.find()
      .then(function(result) {
        res.status(200).json(result);
      })
      .catch(function(error) {
        res.status(500).json(error);
      });
  },

Buka Insomnia dan ubah method menjadi GET dengan url : http://localhost:3000/ lalu klik Send 
Tutorial-CRUD-REST-API-menggunakan-Node.js-Express.js-dan-MongoDB-Bahasa-Indonesia

3. U - UPDATE

Apabila ada kesalahan dalam menginput data, maka Update inilah yang akan sangat dibutuhkan. Bukalah controller nya lalu tambahkan function updateBook dengan code berikut

  updateBook: function(req, res) {
    Book.updateOne(
      {
        _id: req.params.id
      },
      {
        title: req.body.title,
        genre: req.body.genre,
        penulis: req.body.penulis
      }
    )
      .then(function(result) {
        res.status(200).json(result);
      })
      .catch(function(error) {
        res.status(500).json(error);
      });
  },

Buka file routes.js lalu tambahkan code berikut

routes.put("/update/:id", books.updateBook);

Apa arti ".../:id" ? Yaitu dalam melakukan update data, diperlukan id agar yang diupdate cuma satu data, dan ini disebut param. Kenapa :id ? Karena kita tadi mendefenisikan req.params.id pada controller nya. Disini kita juga menggunakan method PUT yaitu untuk update data.

Jika sudah, bisa kita jalankan, pertama GET semua data dulu, lalu pilih satu data yang akan kita update dan copy _id nya

Tutorial-CRUD-REST-API-menggunakan-Node.js-Express.js-dan-MongoDB-Bahasa-Indonesia

Selanjutnya ganti method nya menjadi PUT dengan url : http://localhost:3000/update/id yang dicopy lalu pilih Form URL Encoded lagi, isi name dan value. Disini saya hanya mengubah bagian title saja. Lalu klik Send

Tutorial-CRUD-REST-API-menggunakan-Node.js-Express.js-dan-MongoDB-Bahasa-Indonesia

Dan jika hasilnya seperti dibawah, berartik itu sukses.

Tutorial-CRUD-REST-API-menggunakan-Node.js-Express.js-dan-MongoDB-Bahasa-Indonesia

Silahkan GET semua data lagi buat melihat hasil update nya.

Tutorial-CRUD-REST-API-menggunakan-Node.js-Express.js-dan-MongoDB-Bahasa-Indonesia

Seperti yang saya tandai, title nya berubah dari 'Buku 1' menjadi 'Buku Ngaco'

4. D - DELETE

Yang terakhir yaitu delete data, pada book.controller.js tambahkan function deleteBook dengan code berikut 

  deleteBook: function(req, res) {
    Book.deleteOne({
      _id: req.params.id
    })
      .then(function(result) {
        res.status(200).json({
          msg: "Berhasil menghapus data!"
        });
      })
      .catch(function(error) {
        res.status(500).json(error);
      });
  }

Dan didalam routes.js tambahkan code berikut

routes.delete("/delete/:id", books.deleteBook);

Penjelasannya lebih kurang sama dengan Update, cuma beda method saja, dari PUT menjadi DELETE. Form URL Encoded nya kalo agan ganti dengan No Body juga gak masalah, karena itu tidak akan berpengaruh pada method DELETE. Saya disini akan menghapus data yang saya update tadi yaitu buku dengan title 'Buku Ngaco'.

Tutorial-CRUD-REST-API-menggunakan-Node.js-Express.js-dan-MongoDB-Bahasa-Indonesia

Jika hasilnya seperti ini berarti berhasil

Tutorial-CRUD-REST-API-menggunakan-Node.js-Express.js-dan-MongoDB-Bahasa-Indonesia

Dan silahkan GET semua data lagi, pastikan data nya bener-bener terhapus ya.

Yap selesai sudah Tutorial CRUD RESTful API dengan ExpressJS + MongoDB ini, simple banget kan? Hahaha. Terima kasih sudah membaca tutorial ini, kalo merasa ini bermanfaat jangan lupa dishare juga kepada teman yang lainnya, Semoga Bermanfaat. 


Jangan Lupa Ngopi!

1 komentar: