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:
- Paham tentang JavaScript
- Install text editor, saya menggunakan vscode
- Install nodejs
- 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.
- Express ini berfungsi untuk mendukung routing, middleware, dan view system.
- Body-parser membantu kita untuk mengurai permintaan dan membuat req.body object.
- Modul Cors mempersiapkan middleware express untuk mengaktifkan Cros Origin Resources Sharing dengan berbagai opsi.
- 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 :
- Kita buat express app, kemudian tambah dengan body-parser dan cors middlewares dengan app.use() method.
- Disini kita set origin di “http://localhost:8081”.
- Kita akan membuat simple get route untuk test API
- 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 }); }); };
Baca Juga
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.