Sebelumnya, kita sudah bisa membuat web server yang dapat melakukan manipulasi data, dan menerima data dari body. Namun data tersebut hanya disimpan ke variable. Masalahnya, apabila server direstart, maka data yang disimpan pada variable tersebut akan hilang, karena variable disimpan pada memory sementara (RAM).
Agar data yang disimpan permanen, dan tidak hilang saat server direstart, maka data tersebut harus disimpan ke dalam suatu file. File disini bisa berupa file text, atau pada kasus ini lebih cocok menggunakan database seperti MySQL.
Sebelum memulai, pastikan sudah terdapat sebuah database dan tabel untuk menampung data dari server kita. Jika belum, ketikkan kode berikut pada terminal MySQL ataupun jendela query phpMyAdmin.
CREATE DATABASE `expressmysql`;
USE `expressmysql`;
CREATE TABLE `contacts` (
`id` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
`name` varchar(80),
`phone` varchar(15)
);
INSERT INTO `contacts`(`name`,`phone`) VALUES
("Rhoma", "081356789876"),
("Ani", "081356789877");
Sebuah database baru dengan tabel contacts
akan terbuat dan terisi oleh 2 data.
Setelah membuat database, kembali ke project dan install package express
dan mysql
, agar server bisa terkoneksi dengan database MySQL yang sudah kita buat. Untuk menginstall package ini, cukup buka terminal pada lokasi project dan ketikkan
npm install express mysql
Perhatikan pada command terminal diatas, kita bisa langsung menginstall beberapa package dari npm. Dengan cara memisahkan nama package dengan spasi
npm install package1 package2 package3 . . .
Lalu kita cek pada file package.json
untuk melihat package yang telah kita install. Apabila proses install package sukses, bagian dependencies
dari package.json
akan terlihat seperti ini
"dependencies": {
"express": "^4.17.1",
"mysql": "^2.18.1"
}
Package sudah kita install, sekarang saatnya menyambungkan aplikasi Express kita dengan database MySQL.
Pertama kita import package mysql
agar bisa digunakan
const mysql = require("mysql");
Kedua, buat sebuah variabel yang akan menampung lokasi koneksi database kita dengan fungsi createConnection()
// membuat variable con untuk menampung data koneksi ke MySQL
const con = mysql.createConnection({
host: "localhost",
user: "root",
password: "",
database: "expressmysql"
});
Lalu sambungkan koneksi tersebut dengan menggunakan fungsi connect()
// menyambungkan variable con dengan MySQL
con.connect(function(err) {
if (err) throw err;
console.log("-> Database Connected");
});
Dan bisa langsung kita coba dengan menjalankan aplikasi Express kita
-> Server running on :3000
-> Database Connected
Koneksi sudah siap, kita lanjut untuk menjalankan query pada Express. Query MySQL dapat dijalankan dengan menggunakan fungsi query()
// Eksekusi query SELECT degan koneksi dari variable con
con.query("SELECT * FROM contacts", function(err, rows) {
if (err) throw err;
console.log(rows);
});
Karena kita juga menggunakan console.log()
, hasil dari query bisa kita lihat pada terminal
-> Server running on :3000
-> Database Connected
[ RowDataPacket { id: 1, name: 'Rhoma', phone: '081356789876' },
RowDataPacket { id: 2, name: 'Ani', phone: '081356789877' } ]
Setelah mengetahui cara mengkoneksikan database diatas, kita coba untuk membuat sebuah webservice yang bisa melakukan operasi Create, Read, Update, Delete. Sebenarnya kita sudah mengimplementasikan proses Read Data pada contoh diatas. Tetapi, kita belum membuat endpoint untuk mengakses query tersebut. Sehingga perlu dibuat sebuah endpoint agar bisa kita akses dengan REST Client
Saat client mengakses URL /contact
dengan method GET
, maka aplikasi akan menjalankan query untuk mengambil semua data contact
dari database.
app.get("/contact", function(req, res) {
con.query("SELECT * FROM contacts", function(err, rows) {
if (err) throw err;
res.json(rows);
});
});
Saat client mengakses URL /contact
dengan method POST
, maka aplikasi akan mengambil data dari body
untuk dimasukkan ke dalam tabel contact
pada database.
app.post("/contact", function(req, res) {
let name = req.body.name;
let phone = req.body.phone;
con.query(
"INSERT INTO contacts(name, phone) VALUES (?, ?)",
[name, phone],
function(err, rows) {
if (err) throw err;
res.json({
success: true,
message: "Data Berhasil ditambahkan"
});
}
);
});
Saat client mengakses URL /contact/:id
dengan method PUT
, maka aplikasi akan mengambil data dari body
untuk memperbarui data dari tabel contact
pada database berdasarkan parameter /:id
yang diinputkan. Contohnya kita ingin memperbarui data dengan id
= 1 pada tabel, maka URL akan menjadi /contact/1
.
app.put("/contact/:id", function(req, res) {
let id = req.params.id;
let name = req.body.name;
let phone = req.body.phone;
con.query(
"UPDATE contacts SET name = ?, phone = ? WHERE id = ?",
[name, phone, id],
function(err, rows) {
if (err) throw err;
res.json({
success: true,
message: "Data Berhasil diubah"
});
}
);
});
Sama seperti diatas, client mengakses URL /contact/:id
dengan method DELETE
akan menghapus data pada tabel contact
sesuai dengan parameter /:id
yang diinputkan. Contoh kita akan menghapus data dengan id
= 1
, maka URL akan menjadi /contact/1
.
app.delete("/contact/:id", function(req, res) {
let id = req.params.id;
con.query("DELETE FROM contacts WHERE id = ?", [id], function(err, rows) {
if (err) throw err;
res.json({
success: true,
message: "Data Dihapus"
});
});
});
const express = require("express");
const mysql = require("mysql");
const con = mysql.createConnection({
host: "localhost",
user: "root",
password: "",
database: "expressmysql"
});
con.connect(function(err) {
if (err) throw err;
console.log("-> Database Connected");
});
const app = express();
app.use(express.json());
app.get("/", function(req, res) {
res.json({
success: true,
message: "Hello World!"
});
});
app.get("/contact", function(req, res) {
con.query("SELECT * FROM contacts", function(err, rows) {
if (err) throw err;
console.log(rows);
res.json(rows);
});
});
app.post("/contact", function(req, res) {
let name = req.body.name;
let phone = req.body.phone;
con.query(
"INSERT INTO contacts(name, phone) VALUES (?, ?)",
[name, phone],
function(err, rows) {
if (err) throw err;
res.json({
success: true,
message: "Data Berhasil ditambahkan"
});
}
);
});
app.put("/contact/:id", function(req, res) {
let id = req.params.id;
let name = req.body.name;
let phone = req.body.phone;
con.query(
"UPDATE contacts SET name = ?, phone = ? WHERE id = ?",
[name, phone, id],
function(err, rows) {
if (err) throw err;
res.json({
success: true,
message: "Data Berhasil diubah"
});
}
);
});
app.delete("/contact/:id", function(req, res) {
let id = req.params.id;
con.query("DELETE FROM contacts WHERE id = ?", [id], function(err, rows) {
if (err) throw err;
res.json({
success: true,
message: "Data Dihapus"
});
});
});
app.listen(3000, function() {
console.log("-> Server running on :3000");
});