front-end : HTML5, CSS3, Pug
back-end : NodeJS, MongoDB, Express
#5 TEMPLATES
5.0 Returning HTML
HTML을 직접 텍스트로 적어서 리턴할 수 있으나
반복되는 부분을 매번 복붙하는 것은 비효율적이기 때문에
좀 더 편리하게 리턴하기 위해서 PUG 사용
5.1 Configuring Pug
Pug = 템플릿을 이용해 뷰를 만드는 걸 도와주는 템플릿 엔진
app.set("view engine", "pug");
pug를 설치한 후 express가 view engine으로 pug를 사용할 수 있게 설정해주어야 한다.
express는 views라는 디렉토리에 있는 view를 알아서 보기 때문에 따로 import 해줄 필요는 없다.
디렉토리 안의 pug파일을 렌더링 한 후 html로 변환시킨다.
res.render("<view파일이름>");
이와 같이 컨트롤러가 view를 렌더링 시킨다.
이때 views 디렉토리의 경로 설정에 주의해야 한다.
package.json에서 node.js가 실행되고 있기 때문에 현재 작업 디렉토리는 package.json이 있는 곳으로 인식된다.
5.2 Partials
views 디렉토리 경로를 재설정해주기 위해선 다음과 같이 한다.
//server.js
app.set("views", process.cwd() + "/src/views");
//home.pug
..
body
h1 Video!!!!!
include partials/footer.pug
5.3 Extending Templates
//base.pug
doctype html
html(lang="ko")
head
title Wetube
body
block content
include partials/footer.pug
//home.pug
extends base.pug
block content
h1 HoME!!!
5.4 Variables to Templates
템플릿에 변수를 추가하기 위해선 #{변수명}으로 두고
controller가 render할 때 변수를 지정하여 받게 해줘야 한다
//base.pug
doctype html
html(lang="ko")
head
title #{pageTitle} | Wetube
//controller.js
export const trending = (req, res) => res.rende("home", {pageTitle: "Home"});
5.6 MVP Styles
mvp.css는 html에 기본적인 스타일을 알아서 입혀준다.
css 작업을 하기 전 임시방편으로 사용하기에 요긴하다.
//base.pug
doctype html
html(lang="ko")
head
title #{pageTitle} | Wetube
link(rel="stylesheet" href="https://unpkg.com/mvp.css")
5.7 Conditionals
//layout.pug
body
header
h1=pageTitle
태그에 하나의 변수값만 집어넣을 경우에는 태그=변수로 표시할 수 있다.
ul
if fakeUser.loggedIn
li
a(href='/logout') Logout
else
li
a(href="/login") Login
객체를 받아 (객체명.값) 으로 조건을 설정하여 사용할 수 있다.
(강의에서는 조건을 사용하기 위하여 우선 fakeUser라는 가상의 객체를 만들어서 render하였다.)
5.8 Iteration
iteration(반복)은 elements의 리스트를 보여주는 것이다.
우선 템플릿에는 배열인 변수가 있어야 한다. ( 강의에서는 controller에서 가상의 videos 배열을 만들어서 넘겨줌 )
후에 템플릿에서 each를 적고 보여주고 싶은 변수명을 적음
ex) each video in videos
배열에 값이 없으면 else를 추가할 수도 있다
each video in videos
li=video
else
li Sorry noting found
5.9 Mixins
Mixin = 데이터를 받을 수 있는 partial으로 미리 만들어진 html 블럭이다.
html코드를 효율적으로 재사용할 수 있다.
//video라는 mixin.
mixin video(video)
div
h4=video.title
ul
li #{video.rating}/5.
li #{video.comments} comments.
li Posted #{video.createdAt}.
li #{video.views} views.
mixin을 사용할 때는 다음과 같이 사용한다.
1. mixin을 include해준다
2. videos 안의 각각의 potato에 대하여 video라는 mixin을 호출해서 potato라는 정보 객체를 보냄
3. mixin이 해당 정보를 이용하여 html로 나타냄
include mixins/video
each potato in videos
+video(potato)
'강의기록' 카테고리의 다른 글
[유튜브 클론코딩] #6 MONGODB AND MONGOOSE (0) | 2022.05.17 |
---|---|
[유튜브 클론코딩] #4 ROUTERS (0) | 2022.05.17 |
[유튜브 클론코딩] #3 Introduction To EXPRESS (0) | 2022.05.17 |
[유튜브 클론코딩] #1 #2 Setup (0) | 2022.05.17 |