- Download Node.js di https://nodejs.org/en/download/ dan install
- Cek versi node
node -v
dan cek versi npmnpm -v
- Download MongoDB atau RDBMS
- Buat folder dan atur nama foldernya
- Buka VSCode, pada terminal jalankan perintah
$ npm init --yes
, ini adalah command yang digunakan untuk membuat package.json, yang merupakan file konfigurasi npm. Informasi pengaturan paket npm dijabarkan didalam file package.json.
- Pada terminal ketik
$ npm install express
untuk menginstall express - Import express pada file app.js π
const express = require('express');
const app = express();
- Pada terminal ketik
$ npm install ejs
- Maka sekarang kita bisa menggunakan format ejs sebagai ganti dari html, misalnya dari index.html π menjadi index.ejs π
- EJS memungkinkan kita untuk memasukan kode javascript pada struktur halaman
- Simbol
<% %>
digunakan untuk menetapkan variabel, contoh :<% const item = {id: 4, name: 'tomat'} %>
- Simbol
<%= %>
digunakan untuk mencetak variabel yang akan ditampilkan, contoh :<%= item.id %>
,<%= item.name %>
- Untuk menjalankan server tambahkan kode
app.listen(3000)
const express = require('express');
const app = express();
app.listen(3000);
- Lalu pada terminal ketikan perintah
$ node app.js
- Agar tidak me-restart server secara manual, mari instal nodemon di terminal :
$ npm install nodemon
, suatu paket npm yang dapat me-restart server secara otomatis saat ada perubahan dalam file. - Pada windows :
.\\node_modules\\.bin\\nodemon app.js
- Agar lebih mudah lagi, pada package.json
"start": ".\\node_modules\\.bin\\nodemon app.js"
- Jalankan command
npm run start
dan periksa apakah kamu bisa memulai server menggunakan nodemon.
- Untuk menampilkan halaman maka diperlukan kode
app.get
, halaman biasanya terletak di folderviews
dengan format file .ejs
const express = require('express');
const app = express();
app.get('/top', (req, res) => {
res.render('top.ejs');
});
app.listen(3000);
- Style dan gambar disimpan di folder
public
π
const express = require('express');
const app = express();
// Menspesifikasikan folder yang menyimpan file CSS dan gambar
app.use(express.static('public'));
app.get('/', (req, res) => {
res.render('hello.ejs');
});
app.get('/top', (req, res) => {
res.render('top.ejs');
});
app.listen(3000);
- Untuk memuat style dan gambar untuk diaplikasikan file top.ejs π, maka diperlukan kode berikut
<link rel="stylesheet" href="/css/style.css">
<img src="/images/top.png">
- Pada file .ejs, definisikan variabel yang berupa array
<% const items = [
{id: 1, name: 'kentang'},
{id: 2, name: 'wortel'},
{id: 3, name: 'bawang'}
]; %>
- Pada file .ejs π, variabel items yang menggunakan
forEach
menerapkan fungsi yang ditentukan untuk setiap item dalam array tertentu secara individual
<% items.forEach((item) => { %>
<li>
<span class="id-column"><%= item.id %></span>
<span class="name-column"><%= item.name %></span>
</li>
<% }); %>
<a class="index-button" href="/index">Lihat daftar</a>
- Untuk menghubungkan MySQL ke Node.js https://www.mysqltutorial.org/mysql-nodejs/connect/
- install paket mysql di terminal :
$ npm install mysql
- Import paket mysql pada file app.js π
const mysql = require('mysql');
const connection = mysql.createConnection({
host: 'localhost',
user: 'root',
password: 'password',
database: 'app_list'
});
- Pada file app.js π, atur route agar dapat mengakses data dari database
app.get('/index', (req, res) => {
// Mengakses data dari database
connection.query(
'SELECT * FROM items',
(error, results) => {
console.log(results);
res.render('index.ejs');
}
});
app.get('/index', (req, res) => {
connection.query(
'SELECT * FROM items',
(error, results) => {
// Teruskan object sebagai argument ke-2 res.render
res.render('index.ejs', {items: results});
}
);
});
app.use(express.urlencoded({extended: false}));
res.redirect('/index')
<%- include('header'); %>
req.session.destroy((error) => {
res.redirect('/list');
});
- app.js π
app.use((req, res, next) => {
if (req.session.userId === undefined) {
res.locals.username = 'Tamu';
res.locals.isLoggedIn = false;
} else {
res.locals.username = req.session.username;
res.locals.isLoggedIn = true;
}
next();
});
- header.ejs π
<% if(locals.isLoggedIn){ %>
<li><a href="/logout">Logout</a></li>
<% } else { %>
<li><a href="/login">Login</a></li>
<% } %>
list.ejs
<ul class="list">
<% articles.forEach((article) => { %>
<li>
<% if(article.category === 'limited'){ %>
<i>MEMBER ONLY</i>
<% } %>
<h2><%= article.title %></h2>
<p><%= article.summary %></p>
<a href="/article/<%= article.id %>">Baca selengkapnya</a>
</li>
<% }) %>
</ul>
article.ejs
<div class="article">
<% if(article.category === 'all'){ %>
<h1><%= article.title %></h1>
<p><%= article.content %></p>
<% } %>
<% if(article.category === 'limited'){ %>
<i>MEMBER ONLY</i>
<h1><%= article.title %></h1>
<p><%= article.content %></p>
<% } %>
</div>