Cara menggunakan nodejs mysql close connection

Pada tutorial ini kita akan belajar nodejs yaitu bagaimana cara membuat CRUD (Create Update Delete) dengan Nodejs dan MySQL.

CRUD adalah sebuah fungsi dasar yang biasanya ada dalam sebuah sistem aplikasi yang berhubungan dengan database atau yang biasa disebut dengan persintance layer.

Daftar Isi

Sebagai gambaran mengenai model CRUD yang kita buat dengan nodejs dan MySQL ini, kita akan membuat sebuah webserver dengan nodejs dimana nanti akan menerima request dari client, lalu diproses dan akan return response berupa object Json.

Daftar Isi:

Perencanaan URL & Method CRUD Nodejs

Kita akan membuat sebuah proses CRUD dengan object Products.

Jadi nanti kita bisa mengambil list produk, membuat produk baru, mengupdate produk dan menghapusnya.

Kira-kira seperti ini rancangan url yang akan kita buat.

UrlMethodFungsihttp://localhost:8080/producsGETGet List Productshttp://localhost:8080/producs?id=3GETGet 1 Productshttp://localhost:8080/producsPOSTSimpan Producthttp://localhost:8080/producs?id=1PUTUpdate Product berdasarkan idhttp://localhost:8080/producs?id=1DELETEHapus Product berdasarkan id

Persiapan MySQL

Pastikan kalian sudah memiliki server MySQL di laptop kamu ya. Kalau belum install, coba install dulu.

Kalian bisa menginstall XAMPP atau MAMP untuk sekalian menginstall MySQL nya.

Untuk yang mau install XAMPP di windows, bisa cek link ini: Cara menginstall XAMPP di windows

Jika sudah terinstall MySQL, buat sebuah database dengan nama

CREATE TABLE `products` (
              `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
              `name` varchar(255) DEFAULT NULL,
              `price` int(11) DEFAULT NULL,
              PRIMARY KEY (`id`)
            ) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;
            
2.

Kalian bisa pakai nama yang lain juga ya. Disesuaikan saja.

CREATE DATABASE crud
            

Jika sudah, buat sebuah table

CREATE TABLE `products` (
              `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
              `name` varchar(255) DEFAULT NULL,
              `price` int(11) DEFAULT NULL,
              PRIMARY KEY (`id`)
            ) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;
            
3 di dalam database
CREATE TABLE `products` (
              `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
              `name` varchar(255) DEFAULT NULL,
              `price` int(11) DEFAULT NULL,
              PRIMARY KEY (`id`)
            ) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;
            
2.

CREATE TABLE `products` (
              `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
              `name` varchar(255) DEFAULT NULL,
              `price` int(11) DEFAULT NULL,
              PRIMARY KEY (`id`)
            ) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;
            

Insert juga beberapa dummy data.

INSERT INTO `products` (`id`, `name`, `price`)
            VALUES
            	(1, 'Baju', 100000),
            	(2, 'Celana', 200000);
            

Nah sekarang kita sudah punya database dan tablenya.

Saatnya setup untuk nodejs nya.

Buat Webserver Nodejs

Buat sebuah folder dengan nama

CREATE TABLE `products` (
              `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
              `name` varchar(255) DEFAULT NULL,
              `price` int(11) DEFAULT NULL,
              PRIMARY KEY (`id`)
            ) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;
            
5 dan jalankan command
CREATE TABLE `products` (
              `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
              `name` varchar(255) DEFAULT NULL,
              `price` int(11) DEFAULT NULL,
              PRIMARY KEY (`id`)
            ) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;
            
6.

Cara menggunakan nodejs mysql close connection
npm init

Karena kita akan berurusan dengan MySQL, maka kita perlu install module

CREATE TABLE `products` (
              `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
              `name` varchar(255) DEFAULT NULL,
              `price` int(11) DEFAULT NULL,
              PRIMARY KEY (`id`)
            ) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;
            
7.

npm install mysql
            

Jika sudah, buat sebuah file dengan nama

CREATE TABLE `products` (
              `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
              `name` varchar(255) DEFAULT NULL,
              `price` int(11) DEFAULT NULL,
              PRIMARY KEY (`id`)
            ) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;
            
8 dan
CREATE TABLE `products` (
              `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
              `name` varchar(255) DEFAULT NULL,
              `price` int(11) DEFAULT NULL,
              PRIMARY KEY (`id`)
            ) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;
            
9.

  1. CREATE TABLE `products` (
                  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
                  `name` varchar(255) DEFAULT NULL,
                  `price` int(11) DEFAULT NULL,
                  PRIMARY KEY (`id`)
                ) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;
                
    8: akan kita gunakan untuk menyimpan config database.
  2. CREATE TABLE `products` (
                  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
                  `name` varchar(255) DEFAULT NULL,
                  `price` int(11) DEFAULT NULL,
                  PRIMARY KEY (`id`)
                ) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;
                
    9: akan menjadi file webserver nodejs kita.

Tampilan file di folder kita akan menjadi seperti berikut ini:

Cara menggunakan nodejs mysql close connection
strukture file

Mempersiapkan db.js

Seperti yang kita bilang diatas, file

CREATE TABLE `products` (
              `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
              `name` varchar(255) DEFAULT NULL,
              `price` int(11) DEFAULT NULL,
              PRIMARY KEY (`id`)
            ) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;
            
8 ini akan menampung config MySQL dan akan dipakai di
CREATE TABLE `products` (
              `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
              `name` varchar(255) DEFAULT NULL,
              `price` int(11) DEFAULT NULL,
              PRIMARY KEY (`id`)
            ) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;
            
9.

var mysql = require('mysql');
            var db = mysql.createConnection({
                host: "localhost",
                user: "root", //sesuaikan dengan username di laptop km
                password: "root", //sesuaikan dengan password di laptop km
                database: "crud" //nama database yang kita buat tadi
            });
            db.connect(function(err) {
                if (err) throw err;
                console.log("Connected!");
            });
            module.exports = db;
            

Untuk mengetes apakah kita bisa terkoneksi dengan MySQL servernya, jalankan command:

node db.js
            

Jika ada tulisan

INSERT INTO `products` (`id`, `name`, `price`)
            VALUES
            	(1, 'Baju', 100000),
            	(2, 'Celana', 200000);
            
4 artinya kita sudah berhasil terkoneksi dengan MySQL.

Mempersiapkan index.js

File

CREATE TABLE `products` (
              `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
              `name` varchar(255) DEFAULT NULL,
              `price` int(11) DEFAULT NULL,
              PRIMARY KEY (`id`)
            ) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;
            
9 ini akan bertugas untuk menghandle request yang masuk dan mengolah datanya sesuai dengan method yang dikirimkan oleh client.

Ada beberapa module nodejs yang akan kita pakai, yaitu:

  1. INSERT INTO `products` (`id`, `name`, `price`)
                VALUES
                	(1, 'Baju', 100000),
                	(2, 'Celana', 200000);
                
    6
  2. INSERT INTO `products` (`id`, `name`, `price`)
                VALUES
                	(1, 'Baju', 100000),
                	(2, 'Celana', 200000);
                
    7
  3. INSERT INTO `products` (`id`, `name`, `price`)
                VALUES
                	(1, 'Baju', 100000),
                	(2, 'Celana', 200000);
                
    8

Module ini sudah kita bahas di tutorial belajar nodejs sebelumnya ya. Jika bisa belum mengerti bisa cek dahulu series belajar nodejs kita.

Kita buat kerangka kodingan kita dulu ya guys.

var http = require('http');
            var url = require('url');
            var qs = require('querystring');
            var db = require("./db");
            var port = 8080
            http.createServer(function (req, res) {
                var q = url.parse(req.url, true);
                
                var id = q.query.id;
                res.setHeader('Content-Type', 'application/json');
                
                if(q.pathname == "/products" && req.method === "GET"){
                	
                	if(id !== undefined){
                		//list product
                	}else if(id > 0){
                		//get 1 product
                	}
                    
                }
                else if(q.pathname == "/products" && req.method === "POST"){
                	//save product
                	
                }
                else if(q.pathname == "/products" && req.method === "PUT"){
                	//update product    
                	
                }
                else if(q.pathname == "/products" && req.method === "DELETE"){
                	//delete product    
                }
              
            }).listen(port);
            console.log('server is running on http://localhost:'+ port);
            

Sedikit penjelasanya:

Di line 11, kita get url yang masuk dan parsing url tersebut dengan module

INSERT INTO `products` (`id`, `name`, `price`)
            VALUES
            	(1, 'Baju', 100000),
            	(2, 'Celana', 200000);
            
7.

Di line 13, kita mau mendapatkan id dari url yang dikirim.

Di line 15, kita memastikan bahwa responsee semuanya dalam format json.

Di Line 17 kita akan mengecek, jika methodnya GET maka kita akan punya 2 tugas yaitu:

  1. Jika id undefined maka artinya kita akan mengambil semua data produk.
  2. Jika id tidak undefined dan lebih besar dari 0, maka artinya kita akan mengambil 1 data produk sesuai dengan id yang dimaksud.

Di line 30, untuk handle POST request, yang berarti untuk membuat data produk baru.

Di line 35, untuk handle PUT request, yang berarti untuk mengupdate data produk sesuai id yang diminta.

Di line 40, untuk handle DELETE request, yang berarti untuk menghapus data produk sesuai id yang diminta.

Itulah kerangka yang akan kita gunakan. Sesuai dengan rencana url yang kita buat sebelumnya kan?

Masih bingung?

1. Get Data Product

Tujuan kita disini adalah meng-hadle url:

npm install mysql
            
0 dan
npm install mysql
            
1 untuk mengembalikan data produk dalam bentuk json.

Buka file

CREATE TABLE `products` (
              `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
              `name` varchar(255) DEFAULT NULL,
              `price` int(11) DEFAULT NULL,
              PRIMARY KEY (`id`)
            ) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;
            
9 dan tambahkan kode di dalam bagian method GET. Line 17.

...
            if(q.pathname == "/products" && req.method === "GET"){
                if(id === undefined){
                    //list product
                    let sql = "SELECT * FROM products";
                    db.query(sql,(err, result) => {
                        if (err) throw err;
                        
                        res.end(JSON.stringify(result));
                        
                    });
                }else if(id > 0){
                    //get one product
                    let sql = "SELECT * FROM products where id = "+ id;
                    
                    db.query(sql,(err, result) => {
                        if (err) throw err;
                        
                        var product = result[0];
                        res.end(JSON.stringify(product));
                        
                    });
                }
                
            }
            ...
            

Maksud kode di atas apa ya?*

Jadi code tersebut akan memanggil query

npm install mysql
            
3 dan mengembalikan resultnya dalam bentuk lsit JSON object.

Jika url terdapat ID maka query yang dipanggil adalah

npm install mysql
            
4.

Mari kita coba test koding di atas.

Jalakan perintah

npm install mysql
            
5 dan buka
npm install mysql
            
6 di browser kamu.

Jika hasilnya seperti di bawah ini, maka kalian sudah berhasil membuat sebuah server untuk menghandle GET requets dan memanggil data dari database.

Cara menggunakan nodejs mysql close connection
Get Produk JSON

2. Create Data Produk

Untuk menyimpan produk, kita akan memakai method POST.

Untuk memproses POST data, kita butuh bantuan module

npm install mysql
            
7.

Silakan tambahkan kode ini dibagian POST.

...
    else if(q.pathname == "/products" && req.method === "POST"){
                //save product
                
                var body = '';
                    req.on('data', function (data) {
                        body += data;
                        // Too much POST data, kill the connection!
                        // 1e6 === 1 * Math.pow(10, 6) === 1 * 1000000 ~~~ 1MB
                        if (body.length > 1e6)
                            req.connection.destroy();
                    });
                
                req.on('end', function () {
                        
                        var postData = qs.parse(body);
                        let name = postData.name;
                        let price = postData.price;
                        let sql = `insert into products (name, price) values ( '${name}', '${price}' )`
            		db.query(sql,(err, result) => {
            		        if (err) throw err;
            			    
            			    if(result.affectedRows == 1){
            			    res.end(JSON.stringify({message: 'success'}));	
            			    }else{
            				res.end(JSON.stringify({message: 'gagal'}));	
            			    }
            			    
            		    });    	
                
                });
                
                
                }
            ...
            

Penjelasan:

Jadi kita akan menampung request body dalam 2 variable yaitu

npm install mysql
            
8 dan
npm install mysql
            
9.

Jika sudah, maka kita jalankan query insertnya.

Untuk mencoba insert data produk, kita akan menggunakan aplikasi postman.

Kalau belum punya, download dulu terus install.

Cara menggunakan nodejs mysql close connection
Buat produk baru

Jika kalian mendapatkan result dengan message = success, itu artinya data sudah berhasil tersimpan.

Untuk lebih jelasnya, kita coba get lagi list produk yang baru.

Cara menggunakan nodejs mysql close connection
Get List Produk

Dapat kita lihat, produk Komputer sudah berhasil ter-insert di database.

Mantap guys. Kita sudah sukses menambah produk baru ke dalam database.

3. Update Produk

Untuk mengupdate produk, maka method yang kita gunakan adalah method PUT.

Proses ini hampir sama saat proses create produk. Tapi selain butuh data

npm install mysql
            
8 &
npm install mysql
            
9, kita butuh ID produk yang ingin di update..

Edit lagi file

CREATE TABLE `products` (
              `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
              `name` varchar(255) DEFAULT NULL,
              `price` int(11) DEFAULT NULL,
              PRIMARY KEY (`id`)
            ) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;
            
9 dibagian method PUT.

...
            else if(q.pathname == "/products" && req.method === "PUT"){
                	//update product  
                	var body = '';
                    req.on('data', function (data) {
                        body += data;
                        // Too much POST data, kill the connection!
                        // 1e6 === 1 * Math.pow(10, 6) === 1 * 1000000 ~~~ 1MB
                        if (body.length > 1e6)
                            req.connection.destroy();
                    });
                	
                	req.on('end', function () {
                        
                        var postData = qs.parse(body);
                        let name = postData.name;
                        let price = postData.price;
                        let sql = `UPDATE  products set name = '${name}', price = '${price}' where id = ${id}`
            			db.query(sql,(err, result) => {
            		        if (err) throw err;
            			    
            			    if(result.affectedRows == 1){
            			    	res.end(JSON.stringify({message: 'success'}));	
            			    }else{
            					res.end(JSON.stringify({message: 'gagal'}));	
            			    }
            			    
            		    });    	
                	
                	});  
                	
                }
            ...
            

Sedikit penjelasan…

Jadi kita akan pakai query update disini.

Data

npm install mysql
            
8 dan
npm install mysql
            
9 akan kita ambil dari request body. Data ID produknya, kita ambil dari url params-nya.

Jika sudah, kita testing lagi di postman.

Kita akan coba edit Produk komputer tadi dengan ID 3 seperti gambar di bawah ini.

Cara menggunakan nodejs mysql close connection
Cara menggunakan nodejs mysql close connection

 Update produk id 3

Jika message = success, artinya kamu berhasil update produknya.

Kita buktikan dengan memanggil get list produk lagi.

Cara menggunakan nodejs mysql close connection
Get List Produk setelah update

Kita sudah berhasil meng-update produk dengan nodejs + MySQL.

4. Delete Produk

Untuk menghapus produk, kita akan memakai method DELETE dan kita butuh ID dari produk yang ingin di delete.

Edit lagi file

CREATE TABLE `products` (
              `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
              `name` varchar(255) DEFAULT NULL,
              `price` int(11) DEFAULT NULL,
              PRIMARY KEY (`id`)
            ) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;
            
9.

Tambahakn baris kode dibagian method DELETE.

CREATE TABLE `products` (
              `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
              `name` varchar(255) DEFAULT NULL,
              `price` int(11) DEFAULT NULL,
              PRIMARY KEY (`id`)
            ) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;
            
0

Jadi kita panggil query

var mysql = require('mysql');
            var db = mysql.createConnection({
                host: "localhost",
                user: "root", //sesuaikan dengan username di laptop km
                password: "root", //sesuaikan dengan password di laptop km
                database: "crud" //nama database yang kita buat tadi
            });
            db.connect(function(err) {
                if (err) throw err;
                console.log("Connected!");
            });
            module.exports = db;
            
6 untuk menghapus produk berdasarkan ID nya.

Kita akan memberikan response success jika berhasil, dan gagal jika tidak berhasil.

Cara menggunakan nodejs mysql close connection
Hapus Produk

Itulah cara untuk menghapus produk dengan nodejs MySQL.

Inilah file

CREATE TABLE `products` (
              `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
              `name` varchar(255) DEFAULT NULL,
              `price` int(11) DEFAULT NULL,
              PRIMARY KEY (`id`)
            ) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;
            
9 setelah kita gabung semua kode di atas.

CREATE TABLE `products` (
              `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
              `name` varchar(255) DEFAULT NULL,
              `price` int(11) DEFAULT NULL,
              PRIMARY KEY (`id`)
            ) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;
            
1

Nah itulah tutorial crud dengan nodejs dan MySQL. Cukup mudah dimengerti bukan?

Jika kalian membutuhkan full source codenya, bisa di cek di github repo ini ya: https://github.com/yusidabcs/nodejs-crud-mysql