cara membuat rest api dengan sequelize dan mysql

Cara Membuat Rest API dengan Sequelize dan MySQL

Halo semuanya, pada tutorial kali ini kita akan membuat Rest API dengan menggunakan modul Sequelize dan database MySQL. Nantinya Anda akan belajar membuat file node.js, configurasi ke database, membuat controller, membuat CRUD function(create, read, update, serta delete) dan juga test API melalui POSTMAN.

Prasyarat

Sebelum mengikut tutorial ini, saya sarankan:

  1. Paham tentang JavaScript
  2. Install text editor, saya menggunakan vscode
  3. Install nodejs
  4. Install postman

Selain itu, Anda harus mempunya node.js yang sudah terinstall di sistem Anda. Kita bisa cek versi nodejs dengan cmd lalu ketik “node -v”.

Installasi

Selanjutnya pada tahapan installasi saya akan menggunakan beberapa modul. Disini saya akan menggunakan beberapa modul seperti express, body-parser, cors, sequelize.

  1. Express ini berfungsi untuk mendukung routing, middleware, dan view system.
  2. Body-parser membantu kita untuk mengurai permintaan dan membuat req.body object.
  3. Modul Cors mempersiapkan middleware express untuk mengaktifkan Cros Origin Resources Sharing dengan berbagai opsi.
  4. Sequelize untuk configurasi ke database

Sekarang kita buat folder terlebih dahulu.

Selanjutnya kita install package.json di folder yang kita buat barusan.

Dengan cara, masuk ke cmd lalu ketikan berikut :

npm init

Lalu install beberapa modul berikut ini :

npm install sequelize express cors body-parser mysql2 --save

Membuat server.js

Setalah proses instalasi selesai, kemudian buka folder project Anda menggunakan Text Editor kesukaan Anda. Disini saya akan menggunakan text editor Visual Studio Code.

code .

Pada folder root, buat file dengan nama server.js dan tambahkan code berikut ini.

const express = require("express");
const bodyParser = require("body-parser");
const cors = require("cors");

const app = express();

var corsOptions = {
  origin: "http://localhost:8081"
};

app.use(cors(corsOptions));

// parse requests of content-type - application/json
app.use(bodyParser.json());

// parse requests of content-type - application/x-www-form-urlencoded
app.use(bodyParser.urlencoded({ extended: true }));

// simple route
app.get("/", (req, res) => {
  res.json({ message: "Welcome to smartnet id application." });
});

// set port, listen for requests
const PORT = 8080;
app.listen(PORT, () => {
  console.log(`Server is running on port ${PORT}.`);
});

Penjelasan :

  1. Kita buat express app, kemudian tambah dengan body-parser dan cors middlewares dengan app.use() method.
  2. Disini kita set origin di “http://localhost:8081”.
  3. Kita akan membuat simple get route untuk test API
  4. Disini kita menggunakan port 8080 untuk request

Selanjutnya kita test terlebih dahulu dengan cmd.

node server.js

lalu buka postman atau browser dengan url “http://localhost:8080”.

Membuat Koneksi Database

Selanjutnya kita configurasi mysql melalui sequelize. Disini kita buat terlebih dahulu folder app/config. Setelah itu, kita buat file db.js

module.exports = {
  HOST: "localhost",
  USER: "root",
  PASSWORD: "",
  DB: "nodejs",
  dialect: "mysql"
};

dialect ini untuk database yang akan digunakan. Bisa mysql, mariadb, postgres, mssql.

Membuat Model

Selanjutnya, kita inisiasi sequelize didalam app/models folder yang didalamnya akan berisi beberapa model

Pertama kita buat file index.js

const dbConfig = require("../config/db.js");

const Sequelize = require("sequelize");
const sequelize = new Sequelize(dbConfig.DB, dbConfig.USER, dbConfig.PASSWORD, {
  host: dbConfig.HOST,
  dialect: dbConfig.dialect,
});

const db = {};

db.Sequelize = Sequelize;
db.sequelize = sequelize;

db.blogs = require("./blog_model.js")(sequelize, Sequelize);

module.exports = db;

Setelah itu, kita panggil sync() method di server.js untuk membuat table model

...
const app = express();
app.use(...);

const db = require("./app/models");
db.sequelize.sync();

...

Kita buat terlebih dahulu blog_model.js

module.exports = (sequelize, Sequelize) => {
  const Blog = sequelize.define("blog", {
    judul: {
      type: Sequelize.STRING
    },
    desc: {
      type: Sequelize.TEXT
    },
    published: {
      type: Sequelize.BOOLEAN
    }
  });

  return Blog;
};

Membuat Controller

Next, kita buat file controller di app/controller yang didalamnya berisi CRUD function

Pertama kita buat file dengan nama filenya yaitu blog_controller.js

const db = require("../models");
const Blog = db.blogs;
const Op = db.Sequelize.Op;

// Insert data blog baru
exports.create = (req, res) => {
  // Validate request
  if (!req.body.judul) {
    res.status(400).send({
      message: "Judul tidak boleh kosong"
    });
    return;
  }

  // Create Blog
  const blog= {
    judul: req.body.judul,
    desc: req.body.desc,
    published: req.body.published ? req.body.published : false
  };

  // Save Blog di database
  Blog.create(blog)
    .then(data => {
      res.send(data);
    })
    .catch(err => {
      res.status(500).send({
        message:
          err.message
      });
    });
};

// Get semua data blog
exports.findAll = (req, res) => {
  const judul = req.query.judul;
  var condition = judul? { judul: { [Op.like]: `%${judul}%` } } : null;

  Blog.findAll({ where: condition })
    .then(data => {
      res.send(data);
    })
    .catch(err => {
      res.status(500).send({
        message:
          err.message
      });
    });
};

// Get data blog dengan id
exports.findOne = (req, res) => {
  const id = req.params.id;

  Blog.findByPk(id)
    .then(data => {
      res.send(data);
    })
    .catch(err => {
      res.status(500).send({
        message: err.message
      });
    });
};

// Update blog
exports.update = (req, res) => {
   const id = req.params.id;

  Blog.update(req.body, {
    where: { id: id }
  })
    .then(num => {
      if (num == 1) {
        res.send({
          message: "Blog berhasil diupdate."
        });
      } else {
        res.send({
          message: `blog gagal diupdate dengan id=${id}`
        });
      }
    })
    .catch(err => {
      res.status(500).send({
        message: err.message
      });
    });
};

// Delete blog dengan id
exports.delete = (req, res) => {
  const id = req.params.id;

  Blog.destroy({
    where: { id: id }
  })
    .then(num => {
      if (num == 1) {
        res.send({
          message: "Blog berhasil dihapus"
        });
      } else {
        res.send({
          message: `Blog gagal dihapus dengan id=${id}`
        });
      }
    })
    .catch(err => {
      res.status(500).send({
        message: err.message
      });
    });
};

// Delete semua blog
exports.deleteAll = (req, res) => {
  Blog.destroy({
    where: {},
    truncate: false
  })
    .then(nums => {
      res.send({ message: `${nums} Blog berhasil dihapus` });
    })
    .catch(err => {
      res.status(500).send({
        message:
          err.message
      });
    });
};

Setting Routes

Next, kita perlu setting routes di app/routes. Ketika client mengirim request untuk endpoint menggunakan HTTP request (GET, POST, PUT, DELETE). Kita perlu menentukan bagaimana server meresponse dengan setting routes. Disini kita perlu buat file blog_routes.js.

module.exports = app => {
  const blogs = require("../controllers/blog_controller.js");

  var router = require("express").Router();

  // Create a new Blogs
  router.post("/", blogs.create);

  // Get all Blogs
  router.get("/", blogs.findAll);

  // Get Blog with id
  router.get("/:id", blogs.findOne);

  // Update Blog with id
  router.put("/:id", blogs.update);

  // Delete Blog with id
  router.delete("/:id", blogs.delete);

  // Delete all Blogs
  router.delete("/", blogs.deleteAll);

  app.use('/blogs', router);
};

Kita wajib include routes di server.js

...

require("./app/routes/blog_routes")(app);

// set port, listen for requests
const PORT = ...;
app.listen(...);

Setelah semua selesai, kita test API nya dengan cara buka cmd lalu ketik “node server.js”. Selamat sekarang kita telah belajar membuat Rest API dengan menggunakan modul Sequelize dan database MySQL.

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top