Tutorial Node.js, Express dan MySQL #3 : Menampilkan Data


Fika Ridaul Maulayya
I'm a Full-Stack Web Developer, Content Creator and CO-Founder Santri Koding. I share everything i know with Articles, Screencasts and E-Books at SantriKoding.com

Halo teman-teman semuanya, pada kesempatan kali ini kita semua akan belajar bersama-sama bagaimana cara menampilkan data dari database di dalam project Express.

Sebelumnya, kita akan menginstall package tambahan yang digunakan agar kita tidak melakukan restart server saat merubah route di dalam project Express.

Langkah 1 - Install Nodemon

Disini kita akan menginstall library nodemon secara global di dalam komputer, silahkan jalankan perintah berikut ini di dalam terminal/CMD :

npm install -g nodemon

Sekarang, untuk menjalankan project Express, kita gunakan perintah seperti berikut ini :

nodemon npm start

Maka, jika kita melakukan perubahan pada route di dalam project Express, maka nodemon akan otomatis melakukan restart sendiri.

Langkah 2 - Membuat Route Posts Index

Sekarang, kita lanjutkan untuk membuat route untuk posts, silahkan buat file baru dengan nama posts.js di dalam folder routes dan masukkan kode berikut ini :

var express = require('express');
var router = express.Router();

//import database
var connection = require('../library/database');

/**
 * INDEX POSTS
 */
router.get('/', function (req, res, next) {
    //query
    connection.query('SELECT * FROM posts ORDER BY id desc', function (err, rows) {
        if (err) {
            req.flash('error', err);
            res.render('posts', {
                data: ''
            });
        } else {
            //render ke view posts index
            res.render('posts/index', {
                data: rows // <-- data posts
            });
        }
    });
});

module.exports = router;

Di atas, pertama kita import konfigurasi database yang sudah pernah kita buat sebelumnya.

//import database
var connection = require('../library/database');

Kemudian, kita definisikan 1 route baru dengan method get, yang isinya adalah query ke dalam table posts.

connection.query('SELECT * FROM posts ORDER BY id desc', function (err, rows) {

	//...
	
}

Jika berhasil, maka data posts tersebut akan di parsing ke dalam view post index.

//render ke view posts index
res.render('posts/index', {
   data: rows // <-- data posts
});

Langkah 3 - Membuat View Post Index

Sekarang, kita lanjutkan untuk membuat view untuk menampilkan data posts tersebut. Silahkan buat folder baru dengan nama posts di dalam folder views. Kemudian, di dalam folder posts silahkan buat file baru dengan nama index.ejs dan masukkan kode berikut ini :

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Data Blogs - SantriKoding.com</title>
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
    <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/toastr.js/latest/toastr.min.css">
</head>
<body style="background: lightgray">

    <div class="container mt-5">
        <div class="row">
            <div class="col-md-12">

                <% if (messages.success) { %>
                    <div class="alert alert-success" role="alert"><%- messages.success %></div>
                <% } %>
                
                <% if (messages.error) { %>
                    <div class="alert alert-danger" role="alert"><%- messages.error %></div>
                <% } %>

                <div class="card border-0 shadow rounded">
                    <div class="card-body">
                        <a href="posts/create" class="btn btn-md btn-success mb-3">TAMBAH POST</a>
                        <table class="table table-bordered">
                            <thead>
                              <tr>
                                <th scope="col">NO.</th>
                                <th scope="col">JUDUL POST</th>
                                <th scope="col">CONTENT</th>
                                <th scope="col">AKSI</th>
                              </tr>
                            </thead>
                            <tbody>
                                <% if(data.length){
                                    
                                    for(var i = 0; i< data.length; i++) {%>  
                                        <tr>
                                            <th scope="row" class="text-center"><%= (i+1) %></th>
                                            <td><%= data[i].title%></td>
                                            <td><%= data[i].content%></td>
                                            <td class="text-center">
                                                <a href="/posts/edit/<%=data[i].id%>" class="btn btn-sm btn-primary">EDIT</a>
                                                <a onclick="return alert('Are You sure?')" href="/posts/delete/<%=data[i].id%>" class="btn btn-sm btn-danger">HAPUS</a>
                                            </td>
                                        </tr>
                                    <% }
                                    
                                }else{ %>
                                    <tr>
                                        <td colspan="4">
                                            <div class="alert alert-danger" role="alert">
                                                Data Tidak Ditemukan !
                                            </div>
                                        </td>
                                    </tr>
                                <% } %>    
                            </tbody>
                        </table>  
                    </div>
                </div>
            </div>
        </div>
    </div>
    
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
    <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js"></script>
    <script src="//cdnjs.cloudflare.com/ajax/libs/toastr.js/latest/toastr.min.js"></script>
    </script>

</body>
</html>

Di atas, kita menambahkan session flash untuk menampilkan pesan sukses atau gagal.

<% if (messages.success) { %>
   <div class="alert alert-success" role="alert"><%- messages.success %></div>
<% } %>
                
<% if (messages.error) { %>
   <div class="alert alert-danger" role="alert"><%- messages.error %></div>
<% } %>

Kemudian, untuk menampilkan data posts, kita menggunakan perulangan for, kurang lebih seperti berikut ini :

for(var i = 0; i< data.length; i++) {%>  

	// ...
	
<% } %>  

Langkah 4 - Edit File App.js

Sekarang, kita akan melakukan import beberapa library dan konfigurasi di dalam file app.js. Silahkan buka file app.js dan ubah semua kode-nya menjadi seperti berikut ini :

var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');

//library
var flash   = require('express-flash');
var session = require('express-session');

var indexRouter = require('./routes/index');
var usersRouter = require('./routes/users');
var postsRouter = require('./routes/posts'); // <-- route posts

var app = express();

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');

app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

app.use(session({ 
  cookie: { 
    maxAge: 60000 
  },
  store: new session.MemoryStore,
  saveUninitialized: true,
  resave: 'true',
  secret: 'secret'
}))

app.use(flash())

app.use('/', indexRouter);
app.use('/users', usersRouter);
app.use('/posts', postsRouter); // use route posts di Express

// catch 404 and forward to error handler
app.use(function(req, res, next) {
  next(createError(404));
});

// error handler
app.use(function(err, req, res, next) {
  // set locals, only providing error in development
  res.locals.message = err.message;
  res.locals.error = req.app.get('env') === 'development' ? err : {};

  // render the error page
  res.status(err.status || 500);
  res.render('error');
});

module.exports = app;

Di atas, pertama kita import library express-flash dan express-session.

//library
var flash   = require('express-flash');
var session = require('express-session');

Kemudian, kita import file routes posts yang sebelumnya sudah kita buat.

var postsRouter = require('./routes/posts'); // <-- route posts

kemudian, kita gunakan express-flash di dalam Express menggunakan module use.

app.use(flash())

Terakhir, kita juga gunakan route posts di dalam Express menggunakan module use.

app.use('/posts', postsRouter); // use route posts di Express

Sekarang, jika kita buka project-nya di http://localhost:3000/posts, maka kurang lebih seperti berikut ini :

DI atas, kita mendapatkan pesan Data Tidak DItemukan!, itu karena kita memang belum mempunyai data apapun di dalam table posts.

Di artikel selanjutnya, kita semua akan belajar bagaimana cara memasukkan data ke dalam database menggunakan Express.

Terima Kasih


EBOOK Toko Online Dengan Laravel, Vue Js dan Payment Gateway : https://bit.ly/lp-ebook-laravel-vue-payment-gateway


Fika Ridaul Maulayya
I'm a Full-Stack Web Developer, Content Creator and CO-Founder Santri Koding. I share everything i know with Articles, Screencasts and E-Books at SantriKoding.com
KEBIJAKAN KOMENTAR

Saat memberikan komenatar silahkan memberikan informasi lengkap tentang error, seperti: screenshot, link kode, dll. Baca aturan komentar kami

KOMENTAR