728x90
๋ฐ์ํ
๐ก ์ค์ต ํฌ์ธํธ!
- ๊ธ์ฐ๊ธฐ ํ์ด์ง์์ ์์ฑํ ์๋ก์ด ๋ฐ์ดํฐ๋ฅผ Submin ๋ฒํผ์ ํด๋ฆญํจ๊ณผ ๋์์ ์๋ฒ์ DB ๋ก ์ ์กํ๊ณ , ์๋ฒ์ ์ ์ฅ๋ DB ์์ ๋ฆฌ์คํธ๋ณด๊ธฐ ํ์ด์ง๋ก ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ์ค๋ ์ผ๋ จ์ ๊ณผ์ ์ ๋ง๋ค์ด๋ณด์๋ค.
๐ HTML ๋ ๋๋ง ์์ง EJS ์ฌ์ฉํด๋ณด๊ธฐ
- ์ด์ ์ sendFile() ํจ์๋ฅผ ์ฌ์ฉํด์ HTML ํ์ผ๋ง ์ ์กํด์ฃผ๋ ์ค์ต์ ํ์๋๋ฐ, ํด๋น ๋ฐฉ๋ฒ์ผ๋ก HTML ํ์ผ๋ง ๋ณด๋ด์ฃผ๋ฉด ์ค์ DB ๋ฐ์ดํฐ๋ฅผ ๋ฃ์ด ๋ณด๋ผ ์ ์์ผ๋ฏ๋ก Static ํ์ด์ง๊ฐ ๋๋ค.
- ๋ฐ๋ผ์ ์๋ฒ์ ๋ฐ์ดํฐ๋ฅผ HTML ์ ์ฝ๊ฒ ์ฝ์ ํ ์ ์๊ฒ ํด์ฃผ๋ ์ผ์ข ์ HTML ๋ ๋๋ง ์์ง์ด ํ์ํ๋ฐ ๊ทธ ์ค ํ๋์ธ EJS ๋ฅผ ์ฌ์ฉํด๋ณด์๋ค.
- ์ฐ์ , ํฐ๋ฏธ๋์์ npm install ejs ๋ผ๊ณ ์ ๋ ฅํ์ฌ ejs ๋ฅผ ์ค์นํด์ค ๋ค์ ์๋์ ์ฝ๋๋ฅผ JavaScript ํ์ผ ์๋จ์ ๋ฃ์ด์ค๋ค.
app.set('view engine', 'ejs');
- ์ด์ EJS ํ์ผ์ ๋ง๋ค์ด์ฃผ๋ฉด ๋๋๋ฐ, ํ์ผ์ ๊ทธ๋ฅ html ํ์ผ์ฒ๋ผ ๋ง๋ค๋ ํ์ฅ์๋ง ejs ๋ก ๋ฐ๊พธ์ด์ฃผ๋ฉด ๋๋ค.
(์ฃผ์ํ ์ ์์ ejs ํ์ผ์ ์์ ํด๋ ๋ด์ ๋ฌด์กฐ๊ฑด views ๋ผ๋ ์ด๋ฆ์ ํด๋๋ฅผ ๋ง๋ ํ ๊ทธ ํด๋์ ๋ฃ์ด์ฃผ์ด์ผ ํ๋ค.)
๐ EJS ํ์ผ ๊ธฐ๋ณธ ๋ฌธ๋ฒ ์ฌ์ฉํด๋ณด๊ธฐ
<p class="mb-2">ํ ์ผ : <%= posts[0].ํ ์ผ %></p>
- HTML ์ค๊ฐ์ค๊ฐ ์๋ฒ์ ๋ฐ์ดํฐ๋ฅผ ๋ฃ๊ณ ์ถ์ ๋๋ ์์ ๊ฐ์ด <%= ๋ฐ์ดํฐ ๋ณ์๋ช %> ์ ํํ๋ก ์ฌ์ฉํ๋ฉด HTML ๊ธ์๋ก ๋ ๋๋ง๋๋ค.
- EJS ํ์ผ์์ 'ํ ์ผ : ' ๊ธ์ ๋ค์ DB ์์ ๋ฐ์์จ ํ ์ผ ๋ด์ฉ์ ๋ฃ๊ณ ์ถ๋ค๋ฉด ๋ฐฐ์ด์ 0๋ฒ์งธ ๊ฐ์ฒด์ 'ํ ์ผ' ์ ๊ฐ์ ๊ฐ์ ธ์์ผํ๋ค. (posts[0].ํ ์ผ)
- EJS ๋ฅผ ์ฌ์ฉํ๋ฉด HTML ์ ์ฌ๋ฌ๊ฐ์ง JavaScript ๋ฌธ๋ฒ์ ์ฌ์ฉํ ์ ์๋ค.
<% for(let i = 0; i < posts.length; i++){ %>
<div style="background: rgb(247, 247, 247); padding: 10px; margin: 10px 0;">
<p class="mb-2">ํ ์ผ : <%= posts[i].ํ ์ผ %></p>
<p class="mb-2">๋ง๊ฐ์ผ : <%= posts[i].๋ง๊ฐ์ผ %></p>
</div>
<% } %>
- HTML ์ if ๋ฌธ์ ์ ์ฉํ๊ฑฐ๋ for ๋ฌธ๊ณผ ๊ฐ์ ๋ฐ๋ณต๋ฌธ์ ์ ์ฉํ๊ณ ์ถ์ ๋์๋ <% %> ๋ด๋ถ์ JavaScript ๋ฌธ๋ฒ์ ๋ด์์ฃผ๋ฉด ๋๋ค.
๐ GET ์์ฒญ ์ DB ์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์์ ๋ธ๋ผ์ฐ์ ๋ฅผ ํตํด ๋ณด์ฌ์ฃผ๊ธฐ
- ์ฝ๋์ง๋ ์์๋ ๋ค์๊ณผ ๊ฐ๋ค.
- ๋๊ตฐ๊ฐ๊ฐ /list ๊ฒฝ๋ก๋ก GET ์์ฒญ์ ํ๋ฉด
- MongoDB ์์ ๋ฐ์ดํฐ๋ฅผ ๊บผ๋ด์ด
- list.ejs ํ์ผ์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ํ์ฌ ๋ธ๋ผ์ฐ์ ๋ฅผ ํตํด ๋ณด์ฌ์ค๋ค.
- MongoDB ์์ ๋ฐ์ดํฐ๋ฅผ ๊บผ๋ด๋ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ๋ค.
db.collection('post').find();
db.collection('post').findOne();
- ๋์ ๊ฒฝ์ฐ, .find().toArray() ๋ฅผ ์ด์ฉํ์ฌ post collection ์ ์ ์ฅ๋ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ Array ํํ๋ก ๊ฐ์ ธ์๋ค.
// ๋๊ตฐ๊ฐ๊ฐ /list ๊ฒฝ๋ก๋ก GET ์์ฒญ์ ํ๋ฉด
app.get('/list', function(req, res){
// db.collection ์ ์๋ post ์์ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ์ฐพ์ ๋ฐฐ์ด์ ํํ๋ก ๊ฐ์ ธ์จ๋ค.
db.collection('post').find().toArray(function(err, result){
console.log(result); // console ์ฐฝ์ ํตํด ๊ฐ์ ธ์จ ๋ฐ์ดํฐ ๋ฐฐ์ด ํ์ธ
res.render('list.ejs', {posts : result});
});
- .render() ํจ์์ ๋๋ฒ์งธ ํ๋ผ๋ฏธํฐ๋ก { posts : result } ์ ๊ฐ์ด ์ ์ด์ฃผ๋ฉด DB ์์ ๊ฐ์ ธ์จ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ๋ด์ ๋ฐฐ์ด์ธ result ๋ฅผ posts ๋ผ๋ ๋ณ์์ ๋ด์ EJS ํ์ผ๋ก ๋ณด๋ด์ค๋ค.
- ๊ทธ๋ฌ๋ฉด EJS ํ์ผ์์ ํ์ํ ๋ถ๋ถ์ EJS ๋ฌธ๋ฒ์ ํ์ฉํ์ฌ posts ๋ณ์์ ๋ด๊ธด ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ํด์ฃผ๋ฉด ๋๋ค.
<% for(let i = 0; i < posts.length; i++){ %>
<div style="background: rgb(247, 247, 247); padding: 10px; margin: 10px 0;">
<p class="mb-2">ํ ์ผ : <%= posts[i].ํ ์ผ %></p>
<p class="mb-2">๋ง๊ฐ์ผ : <%= posts[i].๋ง๊ฐ์ผ %></p>
</div>
<% } %>
- ๋ชจ๋ ๊ณผ์ ์ด ์ ๋๋ก ์ด๋ฃจ์ด์ก๋ค๋ฉด ๋ฆฌ์คํธ๋ณด๊ธฐ ํ์ด์ง์์ ์๋์ ๊ฐ์ ํ๋ฉด์ ๋ณผ ์ ์๋ค.
728x90
๋ฐ์ํ
'[๊ฐ๋ฐ] Practice > Node.js MongoDB' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Node.js / MongoDB] AJAX ๋ก ์ญ์ ์์ฒญํ๊ธฐ (0) | 2022.03.12 |
---|---|
[Node.js / MongoDB] ๊ฒ์๋ฌผ๋ง๋ค ๋ฒํธ ๋ฌ๊ธฐ (0) | 2022.03.11 |
[Node.js / MongoDB] Database ์ ์๋ฃ ์ ์ฅํ๋ ๋ฒ (0) | 2022.03.11 |
[Node.js / MongoDB] MongoDB ์ ํ ํ๊ธฐ (0) | 2022.03.11 |
[Node.js / MongoDB] POST ์์ฒญํด๋ณด๊ธฐ (0) | 2022.03.11 |