Cara Setup MySQL di Node.js Express

By Liu Purnomo
Picture of the author
Published on
Cara Setup MySQL di Node.js Express

MySQL adalah sistem manajemen basis data relasional (RDBMS) open source populer. Digunakan untuk menyimpan, mengatur, dan mengambil data dalam format terstruktur menggunakan tabel.

Table of Contents

Persiapan

Untuk mengikuti tutorial ini, Anda akan memerlukan:

  • Node.js
  • MySQL (bisa di install di localhost atau di server)

Membuat aplikasi Express

Pertama, mari kita buat aplikasi Express baru dengan nama node-mysql:

$ mkdir node-mysql
$ cd node-mysql
$ npm init -y

Instalasi Dependencies

Selanjutnya kita akan menginstall beberapa dependencies yang dibutuhkan:

$ npm install express mysql2 sequelize dotenv

Lalu install juga nodemon dan sequelize-cli sebagai dependency development:

$ npm install --save-dev nodemon sequelize-cli

Membuat Folder dan File Project

Project ini akan kita buat dalam folder scr.

$ mkdir src

Lalu buat sebuah file baru didalam src dengan nama app.js

$ touch src/app.js

Buat juga file baru dengan nama .sequelizerc

$ touch .sequelizerc

Lalu buka file .sequelizerc dan isi dengan kode berikut:

const path = require("path");
require("dotenv").config();
module.exports = {
  config: path.resolve("src/config", "config.js"),
  "migrations-path": path.resolve("src/migrations"),
  "seeders-path": path.resolve("src/seeders"),
  "models-path": path.resolve("src/models"),
}

Buat juga file .env

$ touch .env

Lalu buka file .env dan isi dengan kode berikut:

DB_USERNAME=root
DB_PASSWORD=root
DB_HOST=127.0.0.1
DB_PORT=8889
DB_DATABASE=node_mysql

DB_LOGGING=true
DB_BENCHMARK=true

Sesuaikan dengan konfigurasi MySQL Anda.

KeyValueKeterangan
DB_USERNAMErootInformasi Username MySQL
DB_PASSWORDrootInformasi Password MySQL
DB_HOSTlocalhostInformasi Host MySQL
DB_PORT8889Informasi Port MySQL
DB_DATABASEnode_mysqlInformasi Nama Database MySQL

DB_LOGGING dan DB_BENCHMARK digunakan untuk menampilkan log query dan benchmark query. Pastikan bernilai true jika ingin menampilkan log dan benchmark query, dan bernilai false jika tidak ingin menampilkan log dan benchmark query.

Generate Sequelize

Selanjutnya kita akan membuat file konfigurasi sequelize dengan perintah:

$ npx sequelize-cli init

Perintah ini akan membuat folder config, migrations, seeders, dan models dalam folder src.

Konfigurasi Sequelize

Buka file src/config/config.js dan ubah isinya menjadi seperti berikut:

require("dotenv").config();
let logNum = 1;
module.exports = {
  development: {
    username: process.env.DB_USERNAME,
    password: process.env.DB_PASSWORD,
    database: process.env.DB_DATABASE,
    host: process.env.DB_HOST,
    dialect: "mysql",
    port: Number(process.env.DB_PORT),
    pool: {
      max: 10,
      min: 0,
      acquire: 30000,
      idle: 10000,
    },
    benchmark: process.env.DB_BENCHMARK ? true : false,
    logging: (message, benchmark) => {
      if (process.env.DB_LOGGING) {
        if (!benchmark) {
          return console.info(message);
        }
        console.info(
          `NUMBER:${logNum} ${message} Elapsed time: ${benchmark} ms`
        );
        logNum += 1;
      }
    },
  },
  test: {
    username: process.env.DB_USERNAME,
    password: process.env.DB_PASSWORD,
    database: process.env.DB_DATABASE,
    host: process.env.DB_HOST,
    port: process.env.DB_PORT,
    dialect: "mysql",
    logging: (message, benchmark) => {
      if (process.env.DB_LOGGING) {
        if (!benchmark) {
          return console.info(message);
        }
        console.info(`${message} Elapsed time: ${benchmark} ms`);
      }
    },
    pool: {
      max: 10,
      min: 0,
      acquire: 30000,
      idle: 10000,
    },
    benchmark: process.env.DB_BENCHMARK ? true : false,
  },
  production: {
    username: process.env.DB_USERNAME,
    password: process.env.DB_PASSWORD,
    database: process.env.DB_DATABASE,
    host: process.env.DB_HOST,
    port: process.env.DB_PORT,
    dialect: "mysql",
    logging: (message, benchmark) => {
      if (process.env.DB_LOGGING) {
        if (!benchmark) {
          return console.info(message);
        }
        console.info(`${message} Elapsed time: ${benchmark} ms`);
      }
    },
    pool: {
      max: 10,
      min: 0,
      acquire: 30000,
      idle: 10000,
    },
    benchmark: process.env.DB_BENCHMARK ? true : false,
  },
};

Membuat Model

Selanjutnya kita akan membuat model dengan perintah:

$ npx sequelize-cli model:generate --name User --attributes name:string,email:string

Perintah ini akan membuat file src/models/user.js dan file migrasi src/migrations/20210104000000-create-user.js.

Buka file src/models/user.js dan ubah isinya menjadi seperti berikut:

"use strict";
const { Model } = require("sequelize");
module.exports = (sequelize, DataTypes) => {
  class User extends Model {
    static associate(models) {}
  }
  User.init(
    {
      name: DataTypes.STRING,
      email: DataTypes.STRING,
    },
    {
      sequelize,
      modelName: "User",
    }
  );
  return User;
};

Buka file src/migrations/20210104000000-create-user.js dan ubah isinya menjadi seperti berikut:

"use strict";
module.exports = {
  up: async (queryInterface, Sequelize) => {
    await queryInterface.createTable("Users", {
      id: {
        allowNull: false,
        autoIncrement: true,
        primaryKey: true,
        type: Sequelize.INTEGER,
      },
      name: {
        type: Sequelize.STRING,
      },
      email: {
        type: Sequelize.STRING,
      },
      createdAt: {
        allowNull: false,
        type: Sequelize.DATE,
      },
      updatedAt: {
        allowNull: false,
        type: Sequelize.DATE,
      },
    });
  },
  down: async (queryInterface, Sequelize) => {
    await queryInterface.dropTable("Users");
  },
};

Membuat Database

Selanjutnya kita akan membuat database dengan perintah:

$ npx sequelize-cli db:create

Membuat Migration

Selanjutnya kita akan membuat migration dengan perintah:

$ npx sequelize-cli db:migrate

Anda bisa mengecek apakah tabel sudah dibuat di database dengan membuka PHPMyAdmin atau dengan perintah:

$ npx sequelize-cli db:migrate:status

Menampilkan Data

Sekarang Anda sudah punya tabel Users di database. Selanjutnya kita akan menampilkan data dari tabel Users tersebut.

Buka file src/app.js dan ubah isinya menjadi seperti berikut:

require("dotenv").config();
const express = require("express");
const app = express();
const cors = require("cors");
const port = 3000;

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

const { User } = require("./models");

app.get("/", async (req, res) => {
  const users = await User.findAll();
  res.json(users);
});

app.post("/", async (req, res) => {
  const { name, email } = req.body;
  const user = await User.create({ name, email });
  res.json(user);
});

app.listen(port, () => {
  console.log(`Example app listening at http://localhost:${port}`);
});

Menjalankan Aplikasi

Selanjutnya kita akan menjalankan aplikasi dengan perintah:

$ npx nodemon src/app.js

Buka browser dan buka alamat http://localhost:3000. Anda akan melihat data yang ditampilkan dari tabel Users.

Menambah Data

Kita akan membuat data baru dengan menggunakan Postman.

Buka Postman dan buat request dengan method POST ke alamat http://localhost:3000. Lalu buka tab Body dan pilih body lalu pilih raw dan pilih JSON dan masukkan data berikut:

{
  "name": "John Doe",
  "email": "john.doe@mail.com"
}

Lalu klik tombol Send. Anda akan melihat data baru yang ditambahkan.

Menambahkan data dari Postman
Menambahkan data dari Postman

Setelah ditambahkan, Anda bisa menghakses kembali alamat http://localhost:3000 untuk melihat data yang sudah ditambahkan.

Any Question?

Feel free to ask in the comment section below.