author Ahmad Muhardian

Belajar Nodejs #11: Cara Menggunakan Database MySQL pada Nodejs


Nodejs Mysql

Pada tutorial sebelumnya, kita sudah membuat berbagai macam program Nodejs seperti:

Berikutnya kita akan coba belajar membuat program Nodejs dengan database.

Ini penting dipelajari, karena kita tidak hanya akan menyimpan data di dalam variabel dan file saja.

Kita juga akan menyimpan data di database, agar nanti bisa membuat web yang dinamis.

Nodejs biasanya dipasangkan dengan database Mongodb. Namun pada tutorial ini, kita akan menggunakan MySQL.

Bagaimana caranya?

Mari kita pelajari.

Membuat Project Nodejs

Buatlah direktori baru bernama nodejs-mysql:

mkdir nodejs-mysql

Nanti di dalam direktori ini akan berisi file-file berikut:

nodejs-mysql/
├── create_db.js
├── create_table.js
├── db_config.js
├── delete.js
├── insert.js
├── insert_multi.js
├── read.js
└── update.js

Install Modul MySQL

Kita membutuhkan modul mysql untuk menghubungkan Nodejs dengan MySQL.

Modul ini tidak dibawa secara default oleh Nodejs. Karena itu, kita harus menginstalnya.

Ketik perintah berikut untuk menginstal modul mysql:

npm install mysql

Tunggulah sampai prosesnya selesai.

Instalasi modul mysql

Menghubungkan Nodejs dengan MySQL

Buat file baru bernama db_config.js, kemudian isi dengan kode berikut:

var mysql = require('mysql');

var db = mysql.createConnection({
    host: "localhost",
    user: "dian",
    password: "kopi"
});

db.connect(function(err) {
    if (err) throw err;
    console.log("Connected!");
});

Perhatikan parameter yang kita berikan pada method createConnection()

…di sana kita harus isi dengan alamat host, user mysql, dan password mysql.

Biasanya, kalau menggunakan XAMPP, user-nya adalah root dan tanpa password.

Jadi gunakan ini untuk XAMPP:

var db = mysql.createConnection({
    host: "localhost",
    user: "root",
    password: ""
});

Setelah itu, coba eksekusi file db_config.js.

Menghubungkan nodejs dengan mysql

Bila pesan Connected! ditampilkan, maka itu artinya koneksi program nodejs kita dengan server mysql berhasil.

Namun, apabila gagal…

…maka akan tampil error seperti ini:

Error koneksi ke database

Errornya:

Error: ER_ACCESS_DENIED_ERROR: Access denied for user 'dian'@'localhost' (using password: YES)

Ini disebabkan karena saya menggunakan password yang salah.

Membuat Database dengan Nodejs

Kita sudah berhasil menghubungkan Nodejs dengan Mysql. Langkah berikutnya adalah melakukan query.

Query atau SQL (Structured Query Language) merupakan bahasa yang digunakan untuk mengakses MySQL.

Pertama kita akan coba query untuk membuat database.

Sudah tahu query-nya apa?

Belum?

Waduh, coba belajar MySQL dulu…

Berikut ini query untuk membuat database:

CREATE DATABASE nama_database;

Nah, query ini akan kita eksekusi di dalam program Nodejs.

Baiklah, silakan buat file baru bernama create_db.js, kemudian isi dengan kode berikut:

var db = require("./db_config");

const sql = "CREATE DATABASE petani_kopi";
db.query(sql, function (err, result) {
    if (err) throw err;
    console.log("Database created");
});

Pada kode di atas, kita mengimpor file db_config.js sebagai modul.

Berarti kita harus melakukan ekspor di dalam db_config.js agar bisa di-impor.

Tambahkan dan ubah db_config.js menjadi seperti ini:

const mysql = require('mysql');

const db = mysql.createConnection({
    host: "localhost",
    user: "root",
    password: ""
});

db.connect(function(error){
    if(error){
        console.error(error);
    } else {
        console.info("Connected to Database");
    }
});

module.exports = db;

Setelah itu, coba eksekusi program create_db.js.

Membuat database dengan nodejs

Databasenya berhasil dibuat.

Kalau kita cek dari PHPmyadmin, maka akan terlihat seperti ini:

Database di PHPmyadmin

Nama database yang dibuat adalah petani_kopi, karena kita memberikan nama itu di dalam query SQL.

var db = require("./db_config");

const sql = "CREATE DATABASE petani_kopi";
db.query(sql, function (err, result) {
    if (err) throw err;
    console.log("Database created");
});

Fungsi db.query() memiliki dua parameter yang harus diberikan.

Pertama parameter sql yang merupakan query MYSQL dalam bentuk string.

…dan yang kedua adalah fungsi callback yang akan dieksekusi setelah query dilakukan.

db.query(sql, function (err, result) {
    if (err) throw err;
    console.log("Database created");
});

Fungsi callback memiliki dua parameter: err dan result.

Parameter err akan menjadi objek yang menyimpan err kalau gagal melakukan query.

Sedangkan result akan menjadi objek yang menyimpan data hasil query.

Membuat Tabel MySQL dengan Nodejs

Kita sudah tahu cara mengeksekusi query sql di Nodejs. Selanjutnya, kita akan pelajar cara membuat tabel.

Caranya sama seperti membuat database. Perbedaannya pada query yang digunakan.

Namun, sebelum itu…

Silakan ubah isi db_config.js menjadi seperti ini:

const mysql = require('mysql');

const db = mysql.createConnection({
    host: "localhost",
    user: "admin",
    password: "admin",
    database: "petani_kopi"
});

db.connect(function(error){
    if(error){
        console.error(error);
    } else {
        console.info("Connected to Database");
    }
});

module.exports = db;

Pada kode tersebut, kita hanya menambahkan nama database yang sudah dibuat.

Kode db_config.js

Setelah itu, buat file baru bernama create_table.js dengan isi sebagai berikut:

const db = require("./db_config");

const sql = `CREATE TABLE customers 
    (
        id int NOT NULL AUTO_INCREMENT,
        name VARCHAR(255), 
        address VARCHAR(255),
        PRIMARY KEY (id)
    )`;

db.query(sql, function (err, result) {
  if (err) throw err;
  console.log("Table created");
});

Perhatikan kode di atas…

Kita menggunakan petik ini ` untuk menulis query yang lebih dari satu baris.

Tanda petik ini biasanya berada di atas tombol Tab di keyboard.

Keyboard

Ini adalah teknik penulisan string yang lebih dari satu baris di Javascript.

const sql = `CREATE TABLE customers 
    (
        id int NOT NULL AUTO_INCREMENT,
        name VARCHAR(255), 
        address VARCHAR(255),
        PRIMARY KEY (id)
    )`;

Pada query tersebut, kita akan membuat tabel dengan nama customers dengan kolom id, name, dan address.

Oke, sekarang coba kita eksekusi:

Membuat tabel mysql dengan nodejs

…dan coba cek lagi di Phpmyadmin.

Tabel mysql di phpmyadmin

Insert Data ke MySQL dengan Nodejs

Kita sudah berhasil membuat tabel, berikutnya kita akan coba isi data ke sana.

Caranya sama…

Cuma yang membedakan adalah query-nya.

Mari kita coba.

Buatlah file baru bernama insert.js, kemudian isi dengan kode berikut:

const db = require("./db_config");

const sql = `INSERT INTO customers (name, address) 
            VALUES ('Starbucks', 'Lombok Epicentrum Mall')`;

db.query(sql, function (err, result) {
  if (err) throw err;
  console.log("1 record inserted");
});

Setelah itu, coba eksekusi.

Insert data ke Mysql

…dan sekarang coba cek lagi Phpmyadmin.

Insert data ke Mysql

Yay, data pertama berhasil kita buat.

Lalu bagaimana kalau ada banyak data yang ingin kita tambahkan?

Ini bisa dilakukan dengan memberikan parameter [values] pada eksekusi query.

db.query(sql, [values], function (err, result){ ... });

Untuk lebih jelasnya, mari kita coba.

Buatlah file baru bernama insert_multi.js, kemudian isi dengan kode berikut:

const db = require("./db_config");

const sql = "INSERT INTO customers (name, address) VALUES ?";
const values = [
  ["JS Coffee", "Highway 71"],
  ["3AM Coffee", "Lowstreet 4"],
  ["Apple Cafe", "Apple st 652"],
  ["Laravel Coffee", "Mountain 21"],
  ["Nodejs Cafe", "Valley 345"],
  ["PHP Hotel", "Ocean blvd 2"],
  ["One Cafe", "Green Grass 1"],
  ["Richard bar", "Sky st 331"],
  ["Susan Cafe", "One way 98"],
  ["Vicky Club", "Yellow Garden 2"],
  ["Ben Resto", "Park Lane 38"],
  ["William Company", "Central st 954"],
  ["Chuck Food", "Main Road 989"],
  ["Viola Coffee", "Sideway 1633"],
];

db.query(sql, [values], function (err, result) {
  if (err) throw err;
  console.log("Number of records inserted: " + result.affectedRows);
});

Perhatikan pada kode di atas…

Kita menggunakan tanda tanya dalam query MySQL-nya. Tanda tanya ini akan bertugas sebagai placeholder untuk data.

Nanti, tanda tanya tersebut akan mengambil nilai dari variabel values yang akan kita berikan sebagai parameter dalam pengeksekusian query.

Lalu di dalam fungsi callback untuk query, kita menggunakan objek result untuk mengetahui berapa jumlah baris atau data yang telah ditambahkan.

console.log("Number of records inserted: " + result.affectedRows);

Sekarang coba eksekusi program tersebut.

Insert banyak data ke mysql

…dan coba lihat lagi data di Phpmyadmin.

Data di PHPmyadmin

Membaca Data MySQL di Nodejs

Berikutnya kita akan mencoba membaca data dari MySQL dan menampilkannya di dalam program.

Caranya sama…

Perbedaannya pada query saja.

Silakan buat file baru bernama read.js, kemudian isi dengan kode berikut:

const db = require("./db_config");

const sql = "SELECT * FROM customers";

db.query(sql, function (err, result) {
    if (err) throw err;
    console.log(result);
});

Setelah itu, coba eksekusi:

Membaca data dari MYSQL

Dari hasil output ini, kita dapat mengetahui kalau variabel result adalah sebuah array yang berisi objek dari tiap baris atau data.

Biar tampilannya semakin bagus, coba ubah kodenya menjadi seperti ini:

const db = require("./db_config");

const sql = "SELECT * FROM customers";

db.query(sql, function (err, result) {
  if (err) throw err;
  // gunakan perulangan untuk menampilkan data
  console.log(`ID \t NAME \t\t ADDRESS`);
  console.log(`----------------------------------------------------------`);
  result.forEach((customer) => {
    console.log(`${customer.id} \t ${customer.name} \t ${customer.address}`);
  });
});

Setelah itu, coba eksekusi lagi.

Membaca data mysql

Update Data MySQL dengan Nodejs

Berikutnya kita akan coba mengubah data dengan query UPDATE. Caranya sama, tinggal kita ubah query-nya saja.

Silakan buat file baru dengan nama update.js, kemudian isi dengan kode berikut:

const db = require("./db_config");

// kita akan mengubah alamat Starbucks
const sql = `UPDATE customers
           SET address='LEM Lantai 1'
           WHERE id=1`;

db.query(sql, function (err, result) {
    if (err) throw err;
    console.log("Number of records inserted: " + result.affectedRows);
});

Pada kode sql, kita akan mengubah alamat untuk data yang id-nya sama dengan 1. Dalam kasus ini data yang ber-id 1 adalah Starbucks.

Mari kita coba eksekusi.

Update data mysql

Lihat, alamatnya berubah dari Lombok Epicentrum Mall menjadi LEM Lantai 1.

Hapus Data MySQL dengan Nodejs

Hapus data sama seperti update data, yaitu menggunakan query WHERE untuk memilih data yang akan dihapus.

Mari kita coba…

Buatlah file baru bernama delete.js, kemudian isi dengan kode berikut:

const db = require("./db_config");

// kita akan menghapus Starbucks
const sql = `DELETE FROM customers WHERE id=1`;

db.query(sql, function (err, result) {
  if (err) throw err;
  console.log("Number of records inserted: " + result.affectedRows);
});

Lalu coba eksekusi.

Menghapus data mysql dari nodejs

Apa Selanjutnya?

Selamat…kamu sudah belajar menggunakan database MySQL di Nodejs.

Intinya, kita harus paham query MySQL-nya. Karena tanpa ini, kita tidak akan bisa menggunakan MySQL di Nodejs.

Kita sudah coba query untuk membuat database, membuat tabel, insert data, baca data, update, dan delete.

Ini merupakan query dasar yang harus dipahami.

Untuk query yang lainnya, silakan coba sendiri. Karena masih banyak lagi query tingkat lanjut yang perlu dicoba, seperti JOIN, ORDER BY, LIMIT, dll.

Selamat belajar…