EJS
Directory Structure
Test02_EXPRESS/
โโโ data
โ โโโ user.json
โโโ node_modules
โโโ package.json
โโโ public
โ โโโ css
โ โโโ style.css
โโโ router
โ โโโ main.js
โโโ server.js
โโโ views
โโโ body.ejs
โโโ header.ejs
โโโ index.ejs
1. Add dependency
1-1 Update package.json
package.json
package.json
{
"name": "Test02_EXPRESS",
"version": "1.0.0",
"dependencies": {
"ejs": "~2.4.1",
"express": "^4.17.1",
"body-parser":"~1.19.0",
"express-session": "~1.17.0"
}
}
body-parser
: POST data ์ฒ๋ฆฌ
express-session
: session ๊ด๋ฆฌ
Install the modules
npm install
1-2 Update `server.js``
server.js
var express = require('express');
var app = express();
// server๊ฐ ์ฝ์ ์ ์๋๋ก HTML์ ์์น๋ฅผ ์ ์ํด์ฃผ๊ธ
app.set('views',__dirname + '/views');
// server๊ฐ HTML rendering์ ํ ๋ EJS engine ์ฌ์ฉํ๋๋ก ์ค์ ํ๊ธ
app.set('view engine', 'ejs');
app.engine('html', require('ejs').renderFile);
var server = app.listen(8000, function(){
console.log("Express server has started on port 8000!!")
})
// public directory๋ฅผ static folder๋ก ์ค์
app.use(express.static('public'));
//body-parser ์ฌ์ฉํ๊ธฐ
var bodyParser = require('body-parser');
// express-session ์ฌ์ฉํ๊ธฐ
var session = require('express-session');
var fs = require('fs')
app.use(bodyParser.json());
app.use(bodyParser.urlencoded());
app.use(session ({
secret: '@this#is#secret#key@',
resave: false,
saveUninitialized: true
}))
// router module์ธ main.js๋ฅผ ๋ถ๋ฌ์์ app์ ์ ๋ฌํ๊ธ
var router = require('./router/main')(ap,fs);
fs
ํ์ผ์ ์ด๊ธฐ ์ํด ๋ถ๋ฌ์จ Node.js built-in module
secret
์ฟ ํค๋ฅผ ์์๋ก ๋ณ์กฐํ๊ธฐ ์ํ sign ๊ฐ!
์ํ๋ ๊ฐ ๋ฃ์ผ๋ฉด ๋๋ค
resave
session์ ์ธ์ ๋ ์ ์ฅํ ์ง ์ ํ๋ ๊ฐ
express-session documentation์์๋ ์ด ๊ฐ์ false๋ก ํ๋ ๊ฒ์ ๊ถ์ฅํ๊ณ ํ์์ ๋ฐ๋ผ true๋ก ์ค์ ํจ!
saveUninitialized
uninitialized session์ด๋ ์๋ก ์๊ฒผ์ง๋ง ๋ณ๊ฒฝ๋์ง ์์ session์ ์๋ฏธํจ
documentation์์๋ true๋ก ์ค์ ํ๋ ๊ฒ์ ๊ถ์ฅํจ!
2. EJS Template Engine
Teamplate ์ ์ฝ์ด engine์ ๋ฌธ๋ฒ๊ณผ ์ค์ ์ ๋ฐ๋ผ์ file์ HTML ํ์์ผ๋ก ๋ณํ์ํค๋ ๋ชจ๋
HTML์์
<% %>
๋ฅผ ์ฌ์ฉํ์ฌ server์ data๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ ์ฝ๋๋ฅผ ์คํ ํ ์ ์์!
Syntax
<% JavaScript code %>
<% ์ถ๋ ฅํ JavaScript object %> => JavaScript ๊ฐ์ฒด๋ฅผ router์์ ๋ฐ์ ์ฌ ์๋ ์์!
2-1. VIEW๋ก ๋ฐ์ดํฐ ๋๊ธฐ๊ธฐ
main.js
module.exports = function(app,fs){
app.get('/', function(request, response) {
response.render('index', {
title: "MY HOMEPAGE",
length: 5
})
});
}
JSON data
๋ฅผ render method์ ๋๋ฒ์งธ ์ธ์๋ก ์ ๋ฌํจ์ผ๋ก์จ page์์ data๋ฅผ ์ฌ์ฉ ๊ฐ๋ฅํ๊ฒ ๋จ
2-2. VIEW์์ data ์ ๊ทผ & loop
views > index.ejs
<html>
<head>
<title><%= title %></title>
<link rel="stylesheet" type="text/css" href="css/style.css">
</head>
<body>
<h1>Loop it!</h1>
<ul>
<% for(var i=0; i<length; i++){ %>
<li>
<%= "LOOP" + i %>
</li>
<% } %>
</ul>
</body>
</html>
execute
node server.js
result

2-3. EJS ๋ถํ ํ๊ธฐ
PHP
๋Rails
์์ ์ฒ๋ผEJS
์์๋ code๋ฅผ ์ฌ๋ฌ ํ์ผ๋ก ๋ถ๋ฆฌํ๊ณ ๋ถ๋ด์์ ์ฌ์ฉํ ์ ์๋ค!
File ๋ถ๋ฌ์ค๊ธฐ
<% include FILENAME %>
views > header.ejs
<title>
<%= title %>
</title>
<link rel="stylesheet" type="text/css" href="css/style.css">
<script>
console.log("HelloWorld");
</script>
views > body.ejs
<h1>Loop it!</h1>
<ul>
<% for(var i=0; i<length; i++){ %>
<li>
<%= "LOOP" + i %>
</li>
<% } %>
</ul>
views > index.ejs ์์ !
<html>
<head>
<% include ./header.ejs %>
</head>
<body>
<% include ./body.ejs %>
</body>
</html>
์ฌ๋ฐ๋ค!!!
Last updated
Was this helpful?