์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- CSS
- ํฌ๋กค๋ง
- JS
- node.js
- ํ์ด์ฌ
- ํ ์ดํ๋ก์ ํธ
- ํ๋ก ํธ์๋
- ํ๋ก์ ํธ
- ํ๋ก๊ทธ๋๋จธ์ค
- ๊ฐ๋ฐ
- ์ฝ๋ฉ์ ํ
- Til
- ์ฝ๋ฉ
- heapq
- ์ฝ๋ฉํ ์คํธ
- ๋ ธ๋ง๋์ฝ๋
- ๋๋ฆผ์ฝ๋ฉ
- ๋ชจ๊ฐ์ฝ
- error
- fe
- Python
- HTML
- ๋ฐฑ์ค
- KDT
- mongodb
- ๊ตญ๋น์ง์
- react
- ๊ทธ๋ฆฌ๋
- javascript
- ์๊ณ ๋ฆฌ์ฆ
- Today
- Total
๐ฑ → ๐ณ
[node.js] View Engine(ejs, pug, nunjucks) ๋ณธ๋ฌธ
๐ view engine
โ EJS
- ๊ฐ์ฅ ๊ธฐ๋ณธ์ด ๋๋ view engine
- HTML ๋ฌธ๋ฒ ์ฌ์ฉ
- ๋ ์ด์์ ๊ธฐ๋ฅ X
โ pug
- HTML ๋ฌธ๋ฒ์ ๋จ์ํํ์ฌ ์ฌ์ฉ
- ๋ ์ด์์ ๊ธฐ๋ฅ O
โ nunjucks
- HTML ๋ฌธ๋ฒ์ ๊ทธ๋๋ก ์ฌ์ฉ
- ๋ ์ด์์ ๊ธฐ๋ฅ O
โ๏ธ EJS ์ฌ์ฉํ๊ธฐ
npm i -d ejs
express์ ์ด๋ค view engine ์ฌ์ฉํ ์ง ์๋ฆฌ๊ธฐ (์๋ฒ์ฝ๋)
app.set('view engine', 'ejs');
ํด๋ ๊ฐ์ฅ ์ธ๋ถ์ views ํด๋ ๋ง๋ค๊ณ ๋ด๋ถ์ index.ejx ํ์ผ ๋ง๋ค๊ธฐ
localhost:port๋ฒํธ/users ๊ธฐ๋ณธ ์์ฒญ์ด ๋ค์ด์ค๋ฉด index.js ํ์ผ ๋์ฐ๊ธฐ
userRouter.get('/', (req, res) => {
res.render('index');
});
๐ ejs ๋์ ์น ์์
- ์๋ฒ ์ฝ๋
userRouter.get('/', (req, res) => {
const userLen = USER.length;
res.render('index', { USER, userCounts: userLen });
});
- ๋ทฐ ์ฝ๋
<body>
<h1>ํ์ ๋ชฉ๋ก</h1>
<h2>
์ด ํ์ ์ <%= userCounts %>
</h2>
<ul>
<li>
<p>ID: <%= USER[0].id%>
</p>
<p>์ด๋ฆ: <%= USER[0].name%>
</p>
</li>
</ul>
</body>
โ ejs ๋ฌธ๋ฒ
- ๋ฐ์ดํฐ ๋ฐ์ ๋ : <%= %>
- JS ๋ฌธ๋ฒ์ html์ ์ ์ฉํ๊ณ ์ถ์ ๋ : <% %>
ex) if์ for๋ฌธ์ ์กฐํฉํด์ ํ์ ๋ชฉ๋ก ์ ๋ถ ๋์ฐ๋ ํ์ด์ง
<body>
<h1>ํ์ ๋ชฉ๋ก</h1>
<h2>
์ด ํ์ ์ <%= userCounts %>
</h2>
<ul>
<% if(userCounts> 0) { %>
<% for(let i=0; i < userCounts; i++) { %>
<li>
<p>ID: <%= USER[i].id %>
</p>
<p>์ด๋ฆ: <%= USER[i].name %>
</p>
</li>
<% } %>
<% } else { %>
<li>
ํ์ ์ ๋ณด๊ฐ ์์ต๋๋ค!
</li>
<% } %>
</ul>
</body>
โ css ์ ์ฉํ๊ธฐ
views ํด๋์ css ํด๋ ์์ฑ ํ style.css ํ์ผ ๋ง๋ค๊ธฐ
css๋ก index.ejs ๊พธ๋ฏผ ํ index.ejs์์ css ํ์ผ link ์ํค๊ธฐ
<link rel="stylesheet" href="./views/css/style.css">
...?
๐๐ป ์๋ฌ ๋ฉ์์ง ํ์ธ
css ํ์ผ์ ์์น๋ฅผ localhost:4000/css/style.css์์ ์ฐพ๊ณ ์์
์๋๋ ๊ฒ ๋ง์
-> url๊ณผ back-end ํด๋ ๊ตฌ์กฐ๊ฐ ๋์ผํ๋ฉด ํ์ด์ง ์ ์ ์ฃผ์ ๋๋ api ์ฃผ์๋ง ๋ณด๊ณ ๋ ์๋ฒ์ ๊ตฌ์กฐ๋ฅผ ํ์ ํ ์ ์์
๋ง์ฝ, ์๋น์ค๊ฐ ์ค์ํ ํ์ ์ ๋ณด๋ฅผ ๋ด๊ณ ์๋ค๋ฉด ํดํน ์ํ ๋ฐ์
๋ฐ๋ผ์, express ๊ฐ์ ํ๋ ์ ์ํฌ์์๋ url ์ฃผ์๋ฅผ ๋ฐํ์ผ๋ก back-endํด๋์ ๊ตฌ์กฐ๋ฅผ ์ ์ ์๋๋ก static์ด๋ผ๋ ๋ฏธ๋ค์จ์ด ์ ๊ณต
๐static ์ฌ์ฉํ๊ธฐ
static์ ๋ธ๋ผ์ฐ์ ์์ ์ ๊ทผ์ด ๊ฐ๋ฅํ ํด๋์ ์์น๋ฅผ ์ง์ ํด์ฃผ๋ ์ญํ ์ ํจ
์ฌ์ฉ๋ฒ: app.use(express('ํด๋์์น'));
app.use(express.static('views'));
์์ ๋ฏธ๋ค์จ์ด๋ฅผ ์ฌ์ฉํ๋ฉด ํ๋ก์ ํธ์์ ์ฌ์ฉํ๋ ํด๋ ๊ฒฝ๋ก์ ์์์ ์ localhost:4000/views๊ฐ ๋จ
๋ฐ๋ผ์, ./์ ์๋ ๊ฒฝ๋ก -> localhost:4000/views/ ์ ๋์ผํ ์๋ฏธ๋ฅผ ๊ฐ์ง
์ด์ , index.ejs ํ์ผ css ๋งํฌ ๊ฒฝ๋ก๋ฅผ ์๋์ ๊ฐ์ด ๋ณ๊ฒฝํ๋ฉด css๊ฐ ์ ์ฉ๋๋ ๊ฒ์ ํ์ธํ ์ ์์
<link rel="stylesheet" href="./css/style.css">
์ฐธ๊ณ , ํ๋์ ํด๋๋ง ๋ฑ๋ก๋ง ๊ฐ๋ฅํ ๊ฒ ์๋ !
app.use(express.static('js'));
app.use(express.static('views'));
์ฌ๋ฌ ํด๋๋ฅผ ์ค์ ํ๋ฉด ํด๋น ํด๋๋ฅผ ๊ฐ๊ฐ ์ฐพ์ ๋ค๋๋ฉด์ ํ์ผ์ ์ฐพ์(ํ์ผ ์์ผ๋ฉด ์๋ฌ ๋ฐ์)
but, ๋ธ๋ผ์ฐ์ ์์ ์ ๊ทผ ๊ฐ๋ฅํ ๊ธฐ๋ณธ ํด๋๋ฅผ ์ค์ ํ๋ ๋งํผ ๋๋ฌด ๋ง์ ํด๋๋ฅผ ์ ํ๋ ๊ฒ์ ํผํ๋๊ฒ ์ข์
๋๋ถ๋ถ public์ด๋ผ๋ ํด๋๋ฅผ ๊ธฐ๋ณธ์ผ๋ก ์ค์ ํด๋๊ณ ํด๋น ํด๋๋ง ์ค์ ํ๋ ๊ฒฝ์ฐ ๋ง์
public : ๋ธ๋ผ์ฐ์ ๋ฑ์ ํด๋ผ์ด์ธํธ๊ฐ ์ ๊ทผ์ด ๊ฐ๋ฅํ ํด๋๋ก์จ ๋ณดํต css, ๋ธ๋ผ์ฐ์ ์์ ์ฌ์ฉํ๋ js, ์ด๋ฏธ์ง ๋ฑ์ ์์น ์ํด
'Server > Node.js' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[node.js] Front์์ Back์ผ๋ก ๋ฐ์ดํฐ ์ ์ก (0) | 2022.09.24 |
---|---|
[node.js] Error Handling (1) | 2022.09.24 |
[node.js] File-System(promise, async/await) (0) | 2022.09.24 |
[node.js] DOTENV, ์ค์ ์ ๋ณด๋ฅผ ๊ด๋ฆฌํ๋ ๋ชจ๋ (0) | 2022.09.19 |
[node.js] Express ๊ธฐ๋ณธ ํด๋ ๊ตฌ์กฐ (0) | 2022.09.05 |