EJS
- html과 유사한 문법의 템플릿 엔진Mustache
- 간단한 데이터 치환 정도만 제공하는 경량화된 템플릿 엔진Pug
- 들여쓰기 표현식을 이용한 간략한 표기와 레이아웃 등 강력한 기능을 제공.html //html 닫기 태그 없이 들여쓰기로 블럭 구분
head
title= title // =을 이용해서 전달받은 변수 사용 가능
body
h1#greeting 안녕하세요 // id나 class는 태그 뒤에 이어서 바로 사용. () 이용해서 attribute 사용
a.link(href="/") 홈으로
each item in arr
if item.name == 'new'
h1 New Document
else
h1= `${item.name}`
--- layout.pug ---
html
head
title= title
body
block content
--- main.pug ---
extends layout
block content
h1 Main Page
--- title.pug ---
h1= title
--- main.pug ---
extends layout
block content
include title
div.content
안녕하세요
pre
include article.txt
--- listItem.pug ---
mixin listItem(title, name)
tr
td title
td name
--- main.pug ---
include listItem
table
tbody
listItem('제목', '이름')
app.set
을 이용해 템플릿이 저장되는 디렉터리 지정하고, 어떤 템플릿 엔진을 쓸 지 지정 가능--- app.js ---
app.set('views',
path.join(__dirname, 'views'));
app.set('view engine', 'pug');
--- request handler ---
res.render('main', {
title : 'Hello Express',
});
app.locals
--- app.js ---
app.locals.appName = "Express"
--- main.pug ---
h1 - appName
//<h1>Express</h1>
express-generator는 기본적으로 jade라는 템플릿 엔진을 사용
jade는 pug의 이전 이름으로, 최신 지원을 받기 위해선 템플릿 엔진을 Pug로 지정해야함
--view 옵션을 사용하여 템플릿 엔진을 지정할 수 있음.
$ express --view=pug myapp
const asyncHandler = (requestHandler) => {
return async (req, res, next) => {
try{
awaiot requestHandler(req, res);
} catch (err) {
next(err);
}
}
}
---
router.get('/', asyncHandler(async (req, res) => {
const posts = await Posts.find({});
if ( posts.length < 1) {
throw new Error('Not Found');
}
res.render('posts/list', {posts});
});
router.get(... => {
...
const total = await Post
. countDocument({});
const posts = await Post.find({})
.sort({ createdAt: -1 }) // 데이터 순서 유지(작성순)
.skip(perPage * (page - 1)) // skip - 검색 시 포함하지 않을 데이터 수
.limit(perPage); //limit -검색 결과 수 제한
const totalPage =
Math.ceil(total / perPage); //게시글 수 / 페이지 당 게시글 수 = 총 페이지 수
...
mixin pagination(path)
p
-for(let i = 1; i <= totalPage; i++)
a(href = `${path}?page=${i}&perPage=${perPage}`)
if i == page
b= i
else
= i
= " "
---
include pagination
tr
td
+pagination("/posts")