๋ณธ๋ฌธ์œผ๋กœ ๋ฐ”๋กœ๊ฐ€๊ธฐ

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

 

๋ฐ˜์‘ํ˜•