mixin: 같은 형식을 모듈화하여 랜더링하기
mixin:
다른 정보 + 같은 형식을 가진 것들을 캡슐화하는 컨셉을 일컫는다.
ex) DB records
db -> web까지의 흐름
1. db.js
2. videoController.js
3. home.pug
4. videoBlock.pug
1. db.js
: db.js에서 객체'enlistedVideo' export하자.
export const enlistedVideo = { ... }
2. videoController.js
: controller에서 'home'페이지로 랜더링 할 때 객체'videos'를 탬플릿으로 전달하자.
import { enlistedVideo } from "../db";
export const home = (req, res) => res.render("home", { pageTitle: "Home", videos: enlistedVideo });
3. home.pug
: home이 videoBlock.pug에게 {item.요소1, item.요소2 ...}, {item.요소1, item.요소2 ...}를 넘겨준다.
형식: + mixin이름( 전달 할 변수 )
extends layouts/main.pug
include mixins/videoBlock.pug
block content
.videos
each item in videos // videos에 있는 요소들을 하나하나 빼서
+videoBlock({ // mixin으로 넘겨줌
title:item.title,
views:item.views,
videoFile:item.videoFile
})
4. mixins/videoBlock.pug
: 전달 받은 데이터가 가지고 있는 속성들 중 title, views등을 빼서, mixin이 쓰는 속성 이름으로 넘겨주면 된다.
형식: mixin name(파라미터 = { })
mixin videoBlock(video = {})
.videoBlock
video.videoBlcok__thumnail(src=video.videoFile, controls=true)
h4.videoBlcok__title=video.title
h4.videoBlcok__views=video.views