Belajar Nodejs #11: Cara Menggunakan Database MySQL pada Nodejs
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.
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
.
Bila pesan Connected!
ditampilkan, maka itu artinya koneksi program nodejs kita dengan server mysql berhasil.
Namun, apabila gagal…
…maka akan tampil error seperti ini:
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
.
Databasenya berhasil dibuat.
Kalau kita cek dari PHPmyadmin, maka akan terlihat seperti ini:
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.
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.
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:
…dan coba cek lagi 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.
…dan sekarang coba cek lagi Phpmyadmin.
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.
…dan coba lihat lagi 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:
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.
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.
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.
No comments:
Post a Comment