๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
[๊ฐœ๋ฐœ] Practice/Node.js MongoDB

[Node.js / MongoDB] ์ƒ์„ธ ํŽ˜์ด์ง€ ๋งŒ๋“ค๊ธฐ

by Connecting-the-dots 2022. 3. 12.
728x90
๋ฐ˜์‘ํ˜•

๐Ÿ’ก ์‹ค์Šต ํฌ์ธํŠธ!

  • ์ƒ์„ธ ํŽ˜์ด์ง€ ๊ฒฝ๋กœ์— id ๋ผ๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๊ฒŒ์‹œ๋ฌผ _id ์™€ ์ผ์น˜ํ•˜๋Š” ์ƒ์„ธํŽ˜์ด์ง€๋กœ ๋„˜์–ด๊ฐˆ ์ˆ˜ ์žˆ๊ฒŒ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ–ˆ๋‹ค.

๐Ÿ’œ ํŒŒ๋ผ๋ฏธํ„ฐ ๋ฌธ๋ฒ•์œผ๋กœ ๊ฒŒ์‹œ๋ฌผ ์ƒ์„ธ ํŽ˜์ด์ง€ ๊ฒฝ๋กœ ๋งŒ๋“ค๊ธฐ

app.get('/detail/:id', function(req, res){
    req.params.id = parseInt(req.params.id);
    db.collection('post').findOne({_id : req.params.id}, function(err, result){
        res.render('detail.ejs', {detail : result});
    })
});
  • ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” ์‰ฝ๊ฒŒ ๋งํ•ด์„œ URL ๋’ค์— ๋ฌด์ž‘์œ„์˜ ๋ฌธ์ž๋ฅผ ๋ถ™์ผ ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“ค์–ด์ฃผ๋Š” URL ์ž‘๋ช… ๋ฐฉ์‹์ด๋‹ค.
  • ์ฝœ๋ก (:) ๊ธฐํ˜ธ๋ฅผ ๋ถ™์—ฌ์ฃผ๋ฉด /detail/ ๋’ค์— ์–ด๋–ค ๋ฌธ์ž์—ด์„ ๋ถ™์—ฌ์ค˜๋„ GET ์š”์ฒญ์„ ์ธ์‹ํ•˜๊ณ  ์ฝœ๋ฐฑํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.
  • ์ฝœ๋ก (:) ๊ธฐํ˜ธ ๋’ค์—๋Š” ์ž์œ ๋กญ๊ฒŒ ์ด๋ฆ„์„ ๋ถ™์ด๋ฉด ๋˜๋Š”๋ฐ, ๋‚˜์˜ ๊ฒฝ์šฐ ๊ฒŒ์‹œ๋ฌผ์˜ _id ๊ฐ€ ๋“ค์–ด๊ฐˆ ๋ถ€๋ถ„์ด๋ฏ€๋กœ id ๋ผ๊ณ  ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋ถ™์—ฌ์ฃผ์—ˆ๋‹ค. (ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” ์—ฌ๋Ÿฌ ๊ฐœ๋ฅผ ์ด์–ด๋ถ™์ผ ์ˆ˜๋„ ์žˆ๋‹ค.)
  • ์ด์ œ ํ•ด๋‹นํ•˜๋Š” ๊ฒŒ์‹œ๋ฌผ์„ DB ์—์„œ ์ฐพ์•„์™€์•ผํ•˜๋Š”๋ฐ, ์ด๋Š” db.collection ์ค‘ post ์—์„œ ํ•ด๋‹นํ•˜๋Š” ๊ฒŒ์‹œ๊ธ€ ํ•˜๋‚˜๋ฅผ ์ฐพ์•„์˜ค๋ผ๋Š” ์˜๋ฏธ์˜ db.collection('post').findOne() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ€๋Šฅํ•˜๋‹ค.
  • .findOne() ํ•จ์ˆ˜์˜ ์ฒซ๋ฒˆ์งธ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ๋Š” { _id : req.params.id } ๋ฅผ ์‚ฌ์šฉํ–ˆ๋Š”๋ฐ, URL ํŒŒ๋ผ๋ฏธํ„ฐ์ธ id ๊ฐ’์„ ๋ฐ›์•„ ์ด๋ฅผ ํ†ตํ•ด์„œ ํŠน์ • ๊ฒŒ์‹œ๋ฌผ์˜ _id ์— ์ ์šฉํ•˜์—ฌ ํ•ด๋‹นํ•˜๋Š” ๊ฒŒ์‹œ๊ธ€์„ ๋ฐ›์•„์˜ฌ ์ˆ˜ ์žˆ๋‹ค.
  • ๊ทธ๋ฆฌ๊ณ  ์ค‘์š”ํ•œ ๊ฒŒ req.params.id ๋ฅผ ๋ฌธ์ž์—ด๋กœ ๋ฐ”๋€Œ์–ด ์ „๋‹ฌ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์ƒ๊ธธ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ req.params.id = parseInt(req.params.id) ๋ผ๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜์—ฌ ์ˆซ์ž๋กœ ๋ณ€ํ™˜์„ ํ•ด์ค˜์•ผ ํ•œ๋‹ค.
  • ๊ทธ๋ ‡๊ฒŒ DB ์—์„œ ๋ฐ›์•„์˜จ ๊ฒŒ์‹œ๋ฌผ ๋ฐ์ดํ„ฐ๋Š” result ์— ๋‹ด๊ฒจ์˜ค๋Š”๋ฐ ์ด๋ฅผ detail.ejs ํŒŒ์ผ์— ๋„˜๊ฒจ์ค„ ๋•Œ detail ์ด๋ผ๋Š” ๋ณ€์ˆ˜์— ๋‹ด์•„์„œ ๋„˜๊ฒจ์ฃผ์—ˆ๋‹ค.

๐Ÿ’œ ์ƒ์„ธ ํŽ˜์ด์ง€ EJS ํŒŒ์ผ ๋””์ž์ธํ•˜๊ธฐ

<h4 class="container mt-5"><strong>์ƒ์„ธ ํŽ˜์ด์ง€</strong></h4>
<div class="container mt-4">
    <p class="mb-2">ํ• ์ผ : <%= detail.ํ• ์ผ %></p>
    <p class="mb-2">๋งˆ๊ฐ์ผ : <%= detail.๋งˆ๊ฐ์ผ %></p>
</div>
  • ์ด์ œ views ํด๋” ํ•˜์œ„์— ์ƒ์„ธ ํŽ˜์ด์ง€ EJS ํŒŒ์ผ์„ ๋งŒ๋“ค์–ด์ค€๋‹ค.
  • JavaScript ์œผ๋กœ๋ถ€ํ„ฐ ํ•ด๋‹นํ•˜๋Š” ๊ฒŒ์‹œ๋ฌผ์„ detail ์ด๋ผ๋Š” ๋ณ€์ˆ˜์— ๋‹ด์•„์„œ ๋ฐ›์•„์™”์œผ๋‹ˆ ์ด๋ฅผ ํ™œ์šฉํ•˜๋ฉด ๋œ๋‹ค.
  • EJS ๋ฌธ๋ฒ• ์•ˆ์— detail.ํ• ์ผ, detail.๋งˆ๊ฐ์ผ ๊ณผ ๊ฐ™์ด ์ž‘์„ฑํ•ด์ฃผ๋ฉด DB ์—์„œ ๋ฐ›์•„์˜จ ๋ฐ์ดํ„ฐ๊ฐ€ HTML ๋‚ด์šฉ์œผ๋กœ ๋ Œ๋”๋ง๋˜์–ด ๋ธŒ๋ผ์šฐ์ €์— ๋ณด์—ฌ์ง„๋‹ค.

๐Ÿ’œ ๋ธŒ๋ผ์šฐ์ €์—์„œ ํ™•์ธํ•˜๊ธฐ

728x90
๋ฐ˜์‘ํ˜•