풀스택 유튜브 클론코딩 강의 #5.0 ~ 5.9 (230213)
Node.js 및 브라우저용 JavaScript로 구현된 고성능 템플릿 엔진
[장점]
1) 깔끔한 html을 작성하게 함
2) 자바스크립트를 html에 포함할 수 있음
3) 한 파일로 모든 템플릿을 업데이트 할 수 있음 (복붙x)
app.set("view engine", "pug") //express에서 이제 사용할 뷰 엔진은 pug라고 말해줘야함
view 화면을 랜더링하고 랜더링된 html을 클라이언트에 보내주는 역할.
res.render(view, [, locals][, callback])
res.send("home")
수정 => res.render("home") //home.pug를 렌더링한다
app.set("views", process.cwd() + "/src/views") //디렉토리의 위치를 기준으로 views를 찾게 해주기
[base.pug]
doctype html
html(lang="ko")
head
title #{pageTitle} | Wetube //템플릿에 보낼 pageTitle 변수
body
block content
include partials/footer.pug
[videoController.js]
export const trending = (req, res) => res.render("home", {pageTitle: "Home"})
//render(view의 이름, 템플릿에 보낼 변수)
[watch.pug]
extends base.pug //base 확장
block content //템플릿마다 다르게 쓸 수 있음
h1 Watch Video
html태그에 기본 스타일을 입혀줌
https://andybrewer.github.io/mvp/
link(rel="stylesheet" href="https://unpkg.com/mvp.css")
if, else, else if문을 활용
https://pugjs.org/language/conditionals.html
ul
if fakeUser.loggedIn //fakeUser가 loggedIn 상태라면
li
a(href="/logout") Log out ///logout 버튼 표시
else
li
a(href="/login") Login //그게 아니라면 login 버튼 표시
리스트를 생성 (배열 또는 객체가 필요)
Pug는 두 가지 주요 반복 방법인 each및 while을 지원
https://pugjs.org/language/iteration.html
[videoController.js]
export const trending = (req, res) => {
const videos = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
return res.render("home", { pageTitle: "Home", videos}) //array인 videos를 템플릿으로 보낸다
}
[home.pug]
block content
h2 Welcome here
ul
each video in videos //videos array 안의 각 요소에 대해서
li=video //list item을 만들어서 video를 그안에 넣어줌
- 반복되는 코드를 mixins, partials를 이용해 따로 관리할 수 있다.
- partial : 단순히 반복되는 코드를 위한 것
- mixins : 데이터를 받을 수 있는 똑똑한 partial
* partials 적용
[footer.pug]
footer © #{new Date().getFullYear()} Wetube
[base.pug]
doctype html
html(lang="ko")
head
title #{pageTitle} | Wetube
link(rel="stylesheet" href="https://unpkg.com/mvp.css")
body
header
h1=pageTitle
include partials/footer
* mixins 적용
[video.pug]
mixin video(info) //mixin이 받게 될 데이터 info
div
h4=info.title
ul
li #{info.rating}/5.
li #{info.comments} comments.
li Posted #{info.createdAt}.
li #{info.views} views.
[home.pug]
extends base
include mixins/video
block content
h2 Welcome here you will see the trending videos
each potato in videos //videos안의 각각의 potato에 대해서
+video(potato) //video라는 mixin을 호출해서 poato라는 정보객체를 보냄
else
li Sorry nothing found.
```
**git commit**
https://github.com/dmswl2030/Newtube-repeat/commit/cfd8743b35c5a14105fb1352f9eea225b1b3e616