Cara Setup MySQL di Node.js Express
- Published on
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
- Membuat aplikasi Express
- Instalasi Dependencies
- Membuat Folder dan File Project
- Generate Sequelize
- Konfigurasi Sequelize
- Membuat Model
- Membuat Database
- Membuat Migration
- Menampilkan Data
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.
Key | Value | Keterangan |
---|---|---|
DB_USERNAME | root | Informasi Username MySQL |
DB_PASSWORD | root | Informasi Password MySQL |
DB_HOST | localhost | Informasi Host MySQL |
DB_PORT | 8889 | Informasi Port MySQL |
DB_DATABASE | node_mysql | Informasi 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.
Setelah ditambahkan, Anda bisa menghakses kembali alamat http://localhost:3000 untuk melihat data yang sudah ditambahkan.