Tutorial Node.js #8 : Cara Menggunakan Database MySQL pada Nodejs

Pada tutorial Node.js sebelumnya, kita sudah mempelajari :

Berikutnya kita akan coba belajar membuat program Nodejs dengan database. Dengan mempelajari ini 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.

Membuat Project Nodejs

Buatlah direktori baru bernama nodejs-mysql bisa dibuat secara manual di windows exploler atau di console dengan menggunakan sintak :

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

Menghubungkan Nodejs dengan MySQL

Untuk menghubungkan Nodejs dengan MySQL, kita membutuhkan modul mysql untuk menghubungkannya. Modul ini tidak dibawa secara default oleh Nodejs, karena itu kita harus menginstalnya. Ketik perintah berikut untuk menginstal modul mysql :

npm install mysql

Tunggu sampai prosesnya selesai.

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

var mysql = require('mysql');
var db = mysql.createConnection({
    host: "localhost",
    user: "agus",
    password: "123456"
});

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. Jika menggunakan XAMPP, biasanya user-nya adalah root dan tanpa password.

Setelah itu coba eksekusi file db_config.js dengan sintak :

node 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 :

PS C:\Users\Vaio\nodejs-upload\nodejs-mysql> node db_config.js    
C:\Users\Vaio\nodejs-upload\node_modules\mysql\lib\protocol\Parser.js:437
      throw err; // Rethrow non-MySQL errors
      ^

Error: ER_ACCESS_DENIED_ERROR: Access denied for user 'agus'@'localhost' (using password: YES)
    at Sequence._packetToError (C:\Users\Vaio\nodejs-upload\node_modules\mysql\lib\protocol\sequences\Sequence.js:47:14)
    at Handshake.ErrorPacket (C:\Users\Vaio\nodejs-upload\node_modules\mysql\lib\protocol\sequences\Handshake.js:123:18)
    at Protocol._parsePacket (C:\Users\Vaio\nodejs-upload\node_modules\mysql\lib\protocol\Protocol.js:291:23)     
    at Parser._parsePacket (C:\Users\Vaio\nodejs-upload\node_modules\mysql\lib\protocol\Parser.js:433:10)
    at Parser.write (C:\Users\Vaio\nodejs-upload\node_modules\mysql\lib\protocol\Parser.js:43:10)
    at Protocol.write (C:\Users\Vaio\nodejs-upload\node_modules\mysql\lib\protocol\Protocol.js:38:16)
    at Socket.<anonymous> (C:\Users\Vaio\nodejs-upload\node_modules\mysql\lib\Connection.js:88:28)
    at Socket.<anonymous> (C:\Users\Vaio\nodejs-upload\node_modules\mysql\lib\Connection.js:526:10)
    at Socket.emit (node:events:513:28)
    at addChunk (node:internal/streams/readable:324:12)
    --------------------
    at Protocol._enqueue (C:\Users\Vaio\nodejs-upload\node_modules\mysql\lib\protocol\Protocol.js:144:48)
    at Protocol.handshake (C:\Users\Vaio\nodejs-upload\node_modules\mysql\lib\protocol\Protocol.js:51:23)
    at Connection.connect (C:\Users\Vaio\nodejs-upload\node_modules\mysql\lib\Connection.js:116:18)
    at Object.<anonymous> (C:\Users\Vaio\nodejs-upload\nodejs-mysql\db_config.js:8:4)
    at Module._compile (node:internal/modules/cjs/loader:1256:14)
    at Module._extensions..js (node:internal/modules/cjs/loader:1310:10)
    at Module.load (node:internal/modules/cjs/loader:1119:32)
    at Module._load (node:internal/modules/cjs/loader:960:12)
    at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:81:12)
    at node:internal/main/run_main_module:23:47 {
  code: 'ER_ACCESS_DENIED_ERROR',
  errno: 1045,
  sqlMessage: "Access denied for user 'agus'@'localhost' (using password: YES)",
  sqlState: '28000',
  fatal: true
}

Node.js v18.16.1

Errornya :

errno: 1045, 
sqlMessage: "Access denied for user 'agus'@'localhost' (using password: YES)",

Ini disebabkan karena menggunakan password yang salah, maka ubah dengan menggunakan user dan password yang benar, misal user dengan “root” dan password “”.

Baca Juga  Cara Lengkap dan Mudah Install Plugin WordPress

Membuat Database dengan Nodejs

Kita sudah berhasil menghubunkan 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 sengan sintak :

CREATE DATABASE nama_database;

Nah, query ini akan kita eksekusi di dalam program Nodejs. Sekarang kita buat file baru bernama create_db.js, kemudian isi dengan kode berikut :

var db = require("./db_config");
const sql = "CREATE DATABASE belajar_nodejs_mysql";

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.

Fungsi callback memiliki dua parameter, yaitu 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.

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 dengan perintah :

node create_db.js

Hasilnya database berhasil dibuat.

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

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

Membuat Tabel MySQL dengan Nodejs

Kita sudah tahu cara mengeksekusi query sql di Nodejs, selanjutnya kita akan belajar cara membuat tabel. Caranya sama seperti membuat database, perbedaanya pada query yang digunakan. Sebelum itu silahkan ubah isi db_config.js menjadi seperti ini :

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

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 pelanggan
(
    id int NOT NULL AUTO_INCREMENT,
    nama VARCHAR(255),
    alamat 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 satu ( ` ) 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. Pada query tersebut, kita akan membuat tabel dengan nama pelanggan dengan kolom id, nama dan alamat.

Baca Juga  Tutorial Node.js #6 : Menggunakan Modul URL untuk Membuat Webserver Statis

Sekarang coba kita eksekusi dengan perintah :

node create_table.js

Dan coba cek lagi di phpmyadmin, maka akan ada table yang sudah terbuat :

Insert Data ke MySQL dengan Nodejs

Kita sudah berhasil membuat tabel, barikutnya kita akan coba isi data ke dalam table. Caranya sama, yang membedakan adalah query-nya.

Untuk mencobanya, kita buat file baru bernama insert.js, kemudian isi dengan kode berikut :

const db = require("./db_config");
const sql = `INSERT INTO pelanggan (nama, alamat) VALUES ('Saeful Yusuf', 'Jl. Pahlawan Cimahi')`;

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

Setelah itu coba eksekusi dengan sintak :

node insert.js

Selanjutnya kita coba cek lagi phpmyadmin, jika berhasil maka akan ada 1 data yang tersimpan di table tersebut :

Insert data telah berhasil, selanjutnya kita coba insert data dengan banyak data yang akan kita tambahakan, ini bisa dilakukan dengan memberikan parameter [values] pada eksekusi query.

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

Untuk mencobanya kita buat file baru bernama insert_multi.js, kemudian isi dengan kode berikut :

const db = require("./db_config");
const sql = "INSERT INTO pelanggan (nama, alamat) VALUES ?";
const values = [
    ["Adam", "Bandung"],
    ["Ahmad", "Cianjur"],
    ["Alfin", "Medan"],
    ["Budi Sudarsono", "Surabaya"],
    ["Cevi", "Padang"],
    ["Dodi", "Sukabumi"],
    ["Engkos", "Subang"],
    ["Fazri", "Semarang"],
    ["Gandi", "Denpasar"],
    ["Hasan", "Palangkaraya"],
    ["Ikhsan", "Manado"],
    ["Jefry", "Ambon"],
    ["Karlina", "Pontianak"],
    ["Lucky Hakim", "Jayapura"],
];

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 dengan sintak :

node insert_multi.js

Hasilnya kita lihat lagi data di phpmyadmin, maka hasilnya :

Baca Juga  Hyperlink pada HTML

Membaca Data MySQL di Nodejs

Selanjutnya kita akan mencoba mebaca data dari MySQL dan menampilkannya di dalam program. Caranya sama perbedaanya pada query saja.

Untuk mencobanya kita buat file baru bernama read.js, kemudian isi dengan kode berikut :

const db = require("./db_config");
const sql = "SELECT * FROM pelanggan";

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

Selanjutnya kita coba eksekusi dengan perintah :

node read.js

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

Supaya tampilannya semakin bagus, kita coba ubah kodenya menjadi seperti berikut :

const db = require("./db_config");
const sql = "SELECT * FROM pelanggan";

db.query(sql, function (err, result) {
    if (err) throw err;
    
    // gunakan perulangan untuk menampilkan data
    console.log(`ID \t NAMA \t\t\t ALAMAT`);
    console.log(`----------------------------------------------------------`);
    result.forEach((pelanggan) => {
        console.log(`${pelanggan.id} \t ${pelanggan.nama} \t\t\t ${pelanggan.alamat}`);
    });
});

Setelah itu kita coba eksekusi lagi, maka hasilnya seperti berikut :

Update Data MySQL dengan Nodejs

Berikutnya kita akan coba mengubah data dengan query UPDATE. Caranya sama, tinggal kita ubah query-nya saja. Untuk mencobanya, kita buat file baru dengan nama update.js, kemudian isi dengan kode berikut :

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

// kita akan mengubah alamat Saeful Yusuf
const sql = `UPDATE pelanggan SET alamat='Jl.Sudirman Bandung' 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 Sauful Yusuf.

Sekarang kita coba eksekusi dengan perintah :

node update.js

Lihat alamatnya berubah dari Jl. Pahlawan Cimahi menjadi Jl.Sudirman Bandung.

Hapus Data MySQL dengan Nodejs

Hapus data sama seperti update data, yaitu menggunakan query WHERE untuk memilih data yang akan dihapus. Untuk mencobanya kita buat file baru bernama delete.js, kemudian isi dengan kode berikut :

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

// kita akan menghapus Saeful Yusuf
const sql = `DELETE FROM pelanggan WHERE id=1`;

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

Selanjutnya kita coba eksekusi dengan sintak :

node delete.js

Hasilnya data dengan id=1 yaitu Saeful Yusuf dengan alamat Jl.Sudirman Bandung terhapus.

Kita sudah belajar menggunakan database MySQL di Nodejs, untuk mempelajari ini kita harus paham query MySQL terlebih dahulu, karena tanpa ini kita tidak akan bisa menggunakan MySQL di Nodejs.

Kita sudah mencoba query untuk membuat database, membuat tabel, insert data, baca data, update data  dan delete data, ini merupakan query dasar yang harus dipahami. Untuk query yang lainnya bisa dicoba sendiri seperti JOIN, ORDER BY, LIMIT, dan lain-lain.

Referensi :

  • https://www.petanikode.com/nodejs-mysql/

Related Post

Be the first to comment

Leave a Reply

Your email address will not be published.


*


error: Ga bisa dicopy