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

[Node.js / MongoDB] ์ฑ„ํŒ… ๊ธฐ๋Šฅ ๋งŒ๋“ค๊ธฐ

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

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

  • ์ฑ„ํŒ… ๊ธฐ๋Šฅ์„ ๋ณธ๊ฒฉ์ ์œผ๋กœ ๋งŒ๋“ค๊ธฐ ์ „์—, ๋Œ“๊ธ€ ๊ธฐ๋Šฅ๋ถ€ํ„ฐ ์ถ”๊ฐ€ํ•ด๋ณด์•˜๋‹ค.
  • ์‚ฌ์‹ค ๋Œ“๊ธ€๊ณผ ์ฑ„ํŒ…์„ ์œ ์‚ฌํ•˜๋‹ค๊ณ ๋Š” ์ƒ๊ฐํ•ด๋ณธ ์ ์ด ์—†์—ˆ๋Š”๋ฐ, ์‹ค์‹œ๊ฐ„ ์†Œํ†ต์ด ๊ฐ€๋Šฅํ•˜๋ฉด ๊ทธ๊ฒŒ ๋ฐ”๋กœ ์ฑ„ํŒ… ๊ธฐ๋Šฅ์ด ๋˜๋Š” ๊ฒƒ์ž„์„ ์ˆ˜์—…์„ ํ†ตํ•ด ์•Œ ์ˆ˜ ์žˆ์—ˆ๋‹ค.
  • ๋‹ค๋งŒ, ์•„์ง ์ฝ”๋“œ ์ˆ˜์ •์ด ํ•„์š”ํ•œ ๋ถ€๋ถ„์ด ๋งŽ์•„, ์ผ๋ถ€๋งŒ ๋ธ”๋กœ๊ทธ๊ธ€๋กœ ๊ฒŒ์žฌํ–ˆ๋‹ค.

๐Ÿ’œ ์ฑ„ํŒ… ๊ธฐ๋Šฅ ๋งŒ๋“ค๊ธฐ ์ „์—

๐Ÿค ๋Œ“๊ธ€ ๊ธฐ๋Šฅ ๊ตฌ์ƒํ•ด๋ณด๊ธฐ

  • ๊ฒŒ์‹œ๋ฌผ์— ๋Œ“๊ธ€์„ ์ถ”๊ฐ€ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ๋Œ“๊ธ€ ๋ฐœํ–‰ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๋ฉด ๋œ๋‹ค.
  • ๋”ฐ๋ผ์„œ, DB ์— ๋Œ“๊ธ€์„ ์ €์žฅํ•  collection ์„ ์ƒ์„ฑํ•ด๋‘๊ณ , ์›น ๋ธŒ๋ผ์šฐ์ €์—์„œ POST ์š”์ฒญ์„ ํ•˜๋ฉด ํ•ด๋‹นํ•˜๋Š” collection ์— ์ €์žฅํ•ด์ค€๋‹ค.
  • ์ด ๋•Œ, ์œ ์˜ํ•  ์ ์€ ์–ด๋Š ๊ฒŒ์‹œ๋ฌผ์— ๋‹จ ๋Œ“๊ธ€์ธ์ง€ ๊ตฌ๋ณ„์ด ๊ฐ€๋Šฅํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.
  • ๋”ฐ๋ผ์„œ ๋Œ“๊ธ€์„ ์ €์žฅํ•  ๋•Œ ๋ถ€๋ชจ ๊ฒŒ์‹œ๋ฌผ์˜ ์ •๋ณด๋„ ๊ฐ™์ด ์ €์žฅํ•ด์„œ, ์ถ”ํ›„ ๋Œ“๊ธ€ collection ์—์„œ ๋Œ“๊ธ€์„ ๋ถˆ๋Ÿฌ์˜ฌ ๋•Œ ๋ถ€๋ชจ ๊ฒŒ์‹œ๋ฌผ์„ ํŠน์ •ํ•ด์„œ ๋ถˆ๋Ÿฌ์˜ฌ ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ์—ˆ๋‹ค.

๐Ÿค ์ฑ„ํŒ… ๊ธฐ๋Šฅ์œผ๋กœ ์ƒ๊ฐ ์ „ํ™˜ํ•ด๋ณด๊ธฐ

  • ๋Œ“๊ธ€์ด๋“  ์ฑ„ํŒ…์ด๋“  ์šฐ์„  ์–ด๋–ค ๊ฒŒ์‹œ๋ฌผ ํ˜น์€ ์–ด๋–ค ์ฑ„ํŒ…๋ฐฉ(์ฑ„ํŒ…์ƒ๋Œ€)์„ ๊ณจ๋ผ์•ผ ํ•œ๋‹ค.
  • ๊ทธ๋ฆฌ๊ณ  ํ•ด๋‹น ๊ฒŒ์‹œ๋ฌผ, ์ฑ„ํŒ…๋ฐฉ์„ ํด๋ฆญํ–ˆ์„ ๋•Œ, ๋Œ“๊ธ€ ํ˜น์€ ์ฑ„ํŒ…ํ•œ ๋‚ด์šฉ์ด ์ญ‰ ๋‚˜์™€์•ผ ํ•œ๋‹ค.
  • ๋‹ค๋งŒ, ๋‹ค๋ฅธ ๋ถ€๋ถ„์ด๋ผ๋ฉด ์ฑ„ํŒ…์˜ ๊ฒฝ์šฐ ์ƒˆ๋กœ๊ณ ์นจ ์—†์ด ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ด๋ฃจ์–ด์ง€๋ฏ€๋กœ ์ด์— ๊ฑธ๋งž๋Š” ์‹ค์‹œ๊ฐ„ ์—…๋ฐ์ดํŠธ ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•˜๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. 

๐Ÿ’œ ์ฑ„ํŒ…๋ฐฉ ๋งŒ๋“ค๊ธฐ ์ „ ์…‹ํŒ… ๋ฐ ๊ฐ€์ด๋“œ ํ™•์ธ

๐Ÿค ์‚ฌ์šฉ์ž ๊ณ„์ • ์ƒ์„ฑํ•˜๊ธฐ

  • ์ฑ„ํŒ…๋ฐฉ ๊ธฐ๋Šฅ์„ ๋งŒ๋“ค๊ธฐ ์ „์—, ์‹œ๋ฎฌ๋ ˆ์ด์…˜์„ ์œ„ํ•ด ๋‹ค์–‘ํ•œ ์‚ฌ์šฉ์ž ๊ณ„์ •์„ ์ƒ์„ฑํ•˜์—ฌ ๊ฐ ๊ณ„์ •๋“ค๋กœ ๋กœ๊ทธ์ธํ•˜์—ฌ ๊ฒŒ์‹œ๋ฌผ์„ ๊ฒŒ์žฌํ•ด๋‘์—ˆ๋‹ค.

  • ํ˜„์‹ค์„ ์™„๋ฒฝํ•˜๊ฒŒ ๋ฐ˜์˜ํ•œ ๊ณ„์ •๊ณผ ํ•จ๊ป˜ ํ• ์ผ๋“ค์„ ๋งŒ๋“ค์–ด์ฃผ์—ˆ๋‹ค.
    • ๋ง›์ง‘ ๋ธ”๋กœ๊ทธ ๋งํฌ๋ฅผ ๋ณด๋‚ด๋ฉด์„œ ๋ง›์ง‘ ํˆฌ์–ดํ•˜์ž๊ณ  ์กฐ๋ฅด๋Š” suin (suin - ๋Œ€์ „ ๋ง›์ง‘ ํˆฌ์–ด)
    • ์•ˆ๋œ๋‹ค๊ณ  ํ•˜๋ฉด์„œ ๋‹ค ํ•ด๊ฒฐํ•ด์ฃผ๋Š” ์ถฉ๋‚จ ๋‹ด๋‹น ๊ฐœ๋ฐœ์ž myeongsik (myeongsik - ์ถฉ๋‚จ ์š”์ฒญ ์ฒ˜๋ฆฌ)
    • ๋‹ค์งœ๊ณ ์งœ ์›นํˆฐ ์ถ”์ฒœํ•ด์ค€ ๋Œ€ํ•™์ƒ ๋•Œ ๋งŒ๋‚œ 12๋…„์ฐจ ๋ถ€์‚ฐ ์นœ๊ตฌ huigyeong (huigyeong - ์›นํˆฐ ์ •์ฃผํ–‰) 

๐Ÿค ํ• ์ผ๋ฆฌ์ŠคํŠธ ํŽ˜์ด์ง€ ๋‚ด ๊ฒŒ์‹œ๋ฌผ์˜ ์ฑ„ํŒ…ํ•˜๊ธฐ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ์ฑ„ํŒ…๋ฐฉ ๊ฐœ์„คํ•˜๊ธฐ

  • ํ• ์ผ๋ฆฌ์ŠคํŠธ ํŽ˜์ด์ง€ ๋‚ด ๊ฒŒ์‹œ๋ฌผ์˜ ์ฑ„ํŒ…ํ•˜๊ธฐ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ์ฑ„ํŒ…๋ฐฉ์ด ๊ฐœ์„ค๋˜์–ด์•ผ ํ•œ๋‹ค.
  • ํ•ด๋‹น ๊ธฐ๋Šฅ์€ ์•„๋ž˜์˜ ๊ฐ€์ด๋“œ์— ๋”ฐ๋ผ ์ง„ํ–‰ํ•ด๋ณด์•˜๋‹ค.
    • ํ• ์ผ๋ฆฌ์ŠคํŠธ ํŽ˜์ด์ง€์— ์žˆ๋Š” ๊ฐ๊ฐ์˜ ๊ฒŒ์‹œ๋ฌผ ์˜†์— '์ฑ„ํŒ…ํ•˜๊ธฐ' ๋ฒ„ํŠผ์„ ๋งŒ๋“ ๋‹ค.
    • '์ฑ„ํŒ…ํ•˜๊ธฐ' ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ์ฑ„ํŒ…๋ฐฉ ๊ฒŒ์‹œ๋ฌผ์ด ์ƒ์„ฑ๋˜์–ด DB ์— ์ €์žฅ๋œ๋‹ค. (chatroom collection ์— ์ €์žฅ!)
    • ๊ฐ ์ฑ„ํŒ…๋ฐฉ ๊ฒŒ์‹œ๋ฌผ์˜ document ์— ๋“ค์–ด๊ฐˆ ์ •๋ณด๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. 
{
  member : [์ฑ„ํŒ… ์š”์ฒญ๋ฐ›์€ ์‚ฌ์šฉ์ž์˜ _id, ์ฑ„ํŒ… ์š”์ฒญํ•œ ์‚ฌ์šฉ์ž์˜ _id],
  date : ํ˜„์žฌ ๋‚ ์งœ,
  title : ์ฑ„ํŒ…๋ฐฉ์ด๋ฆ„
}
  • ์œ„์™€ ๊ฐ™์€ ๊ฐ€์ด๋“œ์— ๋”ฐ๋ผ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•œ ๋‹ค์Œ, ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋กœ๊ทธ์ธํ•œ ํ›„์— ๋ฆฌ์ŠคํŠธ ํŽ˜์ด์ง€ ๋‚ด ๊ฒŒ์‹œ๋ฌผ์˜ ์ฑ„ํŒ…ํ•˜๊ธฐ ๋ฒ„ํŠผ์„ ๋ˆŒ๋ €์„ ๋•Œ chatroom collection ์— ๊ฒŒ์‹œ๋ฌผ ํ•˜๋‚˜๊ฐ€ ์ƒ์„ฑ๋˜๋ฉด ๋!

๐Ÿค ์‚ฌ์šฉ์ž๊ฐ€ /chat ๊ฒฝ๋กœ๋กœ GET ์š”์ฒญ์„ ํ•˜๋ฉด ์ฑ„ํŒ… ๋ฆฌ์ŠคํŠธ ํŽ˜์ด์ง€ ๋ณด์—ฌ์ฃผ๊ธฐ

  • ์‚ฌ์šฉ์ž๊ฐ€ /chat ๊ฒฝ๋กœ๋กœ GET ์š”์ฒญ์„ ํ•˜๋ฉด ์ฑ„ํŒ…๋ฆฌ์ŠคํŠธ ํŽ˜์ด์ง€๋ฅผ ๋ณด์—ฌ์ฃผ๊ณ , ๊ทธ ์ฑ„ํŒ…๋ฆฌ์ŠคํŠธ ํŽ˜์ด์ง€์—๋Š” ๋กœ๊ทธ์ธํ•œ ์‚ฌ์šฉ์ž๊ฐ€ ์†ํ•ด์žˆ๋Š” ์ฑ„ํŒ…๋ฐฉ ๊ฒŒ์‹œ๋ฌผ์ด ๋ณด์—ฌ์•ผ ํ•œ๋‹ค.
  • ํ•ด๋‹น ๊ธฐ๋Šฅ์€ ์•„๋ž˜์˜ ๊ฐ€์ด๋“œ์— ๋”ฐ๋ผ ์ง„ํ–‰ํ•ด๋ณด์•˜๋‹ค.
    • ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ /chat ๊ฒฝ๋กœ๋กœ GET ์š”์ฒญ์„ ํ•˜๋ฉด ์ฑ„ํŒ… ๋ฆฌ์ŠคํŠธ ํŒŒ์ผ์„ ๋ธŒ๋ผ์šฐ์ €๋กœ ๋ณด๋‚ด์ค€๋‹ค.
    • ์ด ๋•Œ, chatroom collection ์—์„œ ์ง€๊ธˆ ๋กœ๊ทธ์ธํ•œ ์‚ฌ์šฉ์ž์˜ _id ๊ฐ€ ๋“ค์–ด์žˆ๋Š” ์ฑ„ํŒ…๋ฐฉ ๊ฒŒ์‹œ๋ฌผ๋“ค์„ ์ฐพ๋Š”๋‹ค.
    • ์ฐพ์€ ๊ฒŒ์‹œ๋ฌผ๋“ค์„ ์ฑ„ํŒ… ๋ฆฌ์ŠคํŠธ ํŒŒ์ผ์— ์ ์šฉํ•ด์ค€๋‹ค.

๐Ÿ’œ ํ• ์ผ๋ฆฌ์ŠคํŠธ ํŽ˜์ด์ง€์— ์žˆ๋Š” ๊ฐ๊ฐ์˜ ๊ฒŒ์‹œ๋ฌผ ์˜†์— '์ฑ„ํŒ…ํ•˜๊ธฐ' ๋ฒ„ํŠผ์„ ๋งŒ๋“ ๋‹ค.

<a style="color: white; text-decoration: none;" href="/chat">
	<button class="btn chat" style="background: gold;" 
             data-writer="<%= post[i].์ž‘์„ฑ์ž %>" 
             data-num="<%= post[i]._id %>" 
             data-todo="<%= post[i].ํ• ์ผ %>"
         >์ฑ„ํŒ…ํ•˜๊ธฐ</button>
</a>
  • ํ• ์ผ๋ฆฌ์ŠคํŠธ EJS ํŒŒ์ผ์— ์ž‘์„ฑ์ž, ๊ธ€๋ฒˆํ˜ธ, ํ• ์ผ ์ •๋ณด๊ฐ€ ์ˆจ๊ฒจ์ง„ ์ฑ„ํŒ…ํ•˜๊ธฐ ๋ฒ„ํŠผ์„ ์ถ”๊ฐ€ํ•ด์ฃผ์—ˆ๋‹ค.
    (๊ฐ•์˜์—์„œ๋Š” ์ž‘์„ฑ์ž ๋ถ€๋ถ„๋งŒ ๊ฐ€์ ธ์™”๋Š”๋ฐ, ๋‚˜๋Š” ๋งŒ๋“ค๋‹ค๊ฐ€ ๋‹ค๋ฅธ ์ •๋ณด๋„ ๊ฐ€์ ธ์˜ค๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™์•„์„œ ์ถ”๊ฐ€ํ•œ ๊ฒƒ์ด๋ฏ€๋กœ ๊ธฐํ˜ธ์— ๋”ฐ๋ผ ํ•„์š”ํ•œ ์ •๋ณด๋งŒ ์ˆจ๊ฒจ์„œ ๊ฐ€์ ธ์˜ค๋ฉด ๋œ๋‹ค.)

 

  • ์›๋ž˜๋Š” '์ฑ„ํŒ…ํ•˜๊ธฐ' ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ์ฑ„ํŒ…๋ฐฉ๋งŒ ๊ฐœ์„คํ•˜๋Š” ๊ฒƒ์ด ๋ชฉํ‘œ์˜€๋Š”๋ฐ, ์ฑ„ํŒ…๋ฐฉ๋งŒ ๊ฐœ์„ค๋˜๊ณ  ๋ง‰์ƒ ์ฑ„ํŒ…๋ฐฉ์œผ๋กœ ์ด๋™ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ๋ถˆํŽธํ•ด์„œ, ์ดํ›„์— a ํƒœ๊ทธ๋กœ /chat ๊ฒฝ๋กœ๋ฅผ ์—ฐ๊ฒฐํ•ด์ฃผ์—ˆ๋‹ค.
  • ์ด ๋•Œ, ์ฃผ์˜ํ•ด์•ผ ํ•  ์ ์€ button ํƒœ๊ทธ์™€ a ํƒœ๊ทธ์˜ ์ข…์†๊ด€๊ณ„์ด๋‹ค.
    (๋ฐ์ดํ„ฐ ์ „์†ก์ด ์ œ๋Œ€๋กœ ์•ˆ ๋˜๋Š” ์›์ธ์ด ์ด๊ฑฐ์ธ ์ค„ ๋ชฐ๋ผ์„œ ํ•œ์ฐธ์„ ํ—ค๋งธ๋‹ค...ใ…Ž)
    • button ํƒœ๊ทธ ์•ˆ์— a ํƒœ๊ทธ๊ฐ€ ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ์™„๋ฒฝํ•˜๊ฒŒ ์˜์—ญ์ด ๊ฒน์น˜์ง€ ์•Š๊ณ  ์˜์—ญ ํฌ๊ธฐ์˜ ์ฐจ์ด๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.
    • ์ฆ‰, a ํƒœ๊ทธ์˜ ์˜์—ญ์ด button ํƒœ๊ทธ์˜ ์˜์—ญ์— ํฌํ•จ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ •ํ™•ํ•˜๊ฒŒ a ํƒœ๊ทธ์˜ ์˜์—ญ์„ ํด๋ฆญํ•˜์ง€ ์•Š์œผ๋ฉด ์ฑ„ํŒ… ๋ฆฌ์ŠคํŠธ ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•˜์ง€ ์•Š๋Š”๋‹ค.
    • ๊ทธ๋ฆฌ๊ณ  a ํƒœ๊ทธ๋ฅผ ํด๋ฆญํ•ด์„œ ์ฑ„ํŒ… ๋ฆฌ์ŠคํŠธ ํŽ˜์ด์ง€๋กœ ๋ง‰์ƒ ์ด๋™์„ ํ–ˆ์„ ๋•Œ๋Š” button ํƒœ๊ทธ๋ฅผ ํด๋ฆญํ•œ ๊ฑธ๋กœ ์ธ์‹์ด ๋˜์ง€ ์•Š์•„, button ํƒœ๊ทธ์˜ ์ •๋ณด๊ฐ€ DB ๋กœ ์ •์ƒ์ ์œผ๋กœ ์ „์†ก์ด ๋˜์ง€ ์•Š์•˜๋‹ค.
    • ๊ทธ๋ž˜์„œ a ํƒœ๊ทธ์™€ button ํƒœ๊ทธ์˜ ์œ„์น˜๋ฅผ ๋ฐ”๊พธ์–ด a ํƒœ๊ทธ ์•ˆ์— button ํƒœ๊ทธ๋ฅผ ๋„ฃ์–ด์ฃผ์—ˆ๋”๋‹ˆ ์˜์—ญ ํฌ๊ธฐ๋„ ์ผ์น˜ํ•˜๊ณ  ๋‘ ๊ธฐ๋Šฅ ๋ชจ๋‘ ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ–ˆ๋‹ค. (์ •ํ™•ํ•œ ์›์ธ ๋ถ„์„์€ ๊ตฌ๊ธ€๋ง์„ ํ•ด๋ด์•ผ ํ•  ๊ฒƒ ๊ฐ™๋‹ค.)

 


๐Ÿ’œ '์ฑ„ํŒ…ํ•˜๊ธฐ' ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ์ฑ„ํŒ…๋ฐฉ ๊ฒŒ์‹œ๋ฌผ์ด ์ƒ์„ฑ๋˜์–ด DB ์— ์ €์žฅ๋˜๊ณ , DB ์—์„œ ์ฑ„ํŒ… ๋ฆฌ์ŠคํŠธ ํŽ˜์ด์ง€๋กœ ์ฑ„ํŒ…๋ฐฉ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค.

  $('.chat').click(function(e){

    let writer = e.target.dataset.writer;
    let num = e.target.dataset.num;
    let todo = e.target.dataset.todo;

    $.post('/chatroom', {์ž‘์„ฑ์ž : writer, ๊ธ€๋ฒˆํ˜ธ : num, ํ• ์ผ : todo}).then(()=>{
      console.log('์„ฑ๊ณตํ–ˆ์Šต๋‹ˆ๋‹ค.');
    })
  })
  • '์ฑ„ํŒ…ํ•˜๊ธฐ' ๋ฒ„ํŠผ์— ์ˆจ๊ฒจ๋†จ๋˜ ๋ฐ์ดํ„ฐ๋“ค์„ '์ฑ„ํŒ…ํ•˜๊ธฐ' ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ /chatroom ๊ฒฝ๋กœ๋กœ POST ์š”์ฒญ์„ ํ•  ๋•Œ ๊ฐ์ฒด์˜ ํ˜•ํƒœ๋กœ ์ „์†กํ•ด์ฃผ์—ˆ๋‹ค.
const {ObjectId} = require('mongodb');

app.post('/chatroom', doLogin, function(req, res){

    let saveData = {
        post : parseInt(req.body.๊ธ€๋ฒˆํ˜ธ),
        title : req.body.ํ• ์ผ,
        members : [ObjectId(req.body.์ž‘์„ฑ์ž), req.user._id], // ๊ธ€์ž‘์„ฑ์ž์™€ ์ฑ„ํŒ…์š”์ฒญ์ž
        date : new Date() // ํ˜„์žฌ ๋‚ ์งœ
    }

    db.collection('chatroom').insertOne(saveData).then(()=>{
        res.send('์ฑ„ํŒ…๋ฐฉ ๊ฐœ์„ค ์™„๋ฃŒ')
    })
})
  • ๊ทธ๋Ÿฌ๋ฉด POST ์š”์ฒญ์„ ํ•  ๋•Œ๋งˆ๋‹ค JavaScript ํŒŒ์ผ์—์„œ ๋ฐ์ดํ„ฐ๋“ค์„ ๋ฐ›์•„, chatroom collection ์— document ๋กœ ์ €์žฅํ•œ๋‹ค.
  • ๊ฐ€์ด๋“œ์—์„œ ์š”๊ตฌํ–ˆ๋˜ document ์–‘์‹์—์„œ ๋‚ด๊ฐ€ ํ•„์š”๋กœ ํ•˜๋Š” ๋ถ€๋ถ„๋“ค์„ ์กฐ๊ธˆ ์ถ”๊ฐ€ํ•ด์„œ ์ž‘์„ฑํ–ˆ๋‹ค.
app.get('/chat', doLogin, function(req, res){

    db.collection('chatroom').find({members : req.user._id}).toArray().then((result)=>{
        res.render('chat.ejs', {data : result})
    })
})
  • ์ด์ œ /chat ๊ฒฝ๋กœ๋กœ GET ์š”์ฒญ์„ ํ•˜๋ฉด chatroom collection ์— ์ €์žฅ๋˜์–ด์žˆ๋˜ document ๋“ค์„ result ๋กœ ๋ฐ›์•„์™€์„œ data ๋ผ๋Š” ๋ณ€์ˆ˜์— ๋‹ด๊ฒจ ์•„๋ž˜์˜ ์ฑ„ํŒ… ๋ฆฌ์ŠคํŠธ EJS ํŒŒ์ผ์— ์ ์šฉ๋˜์–ด ๋ Œ๋”๋ง๋œ๋‹ค.
<h4 class="container mt-5 mb-4"><strong>์ฑ„ํŒ… ๋ฆฌ์ŠคํŠธ</strong></h4>

<div class="container">
    <div class="row">
        <div class="col-3">
            <ul class="list-group chat-list">

                <% for (var i=0; i < data.length ; i++){ %>
                  <li class="list-group-item" data-id="<%= data[i]._id %>" data-writer="<%= data[i].members[0] %>">
                    <h6>๊ธ€๋ฒˆํ˜ธ : <%= data[i].post %> </h6>   
                    <h6>์ฑ„ํŒ…๋ฐฉ : <%= data[i].title %> </h6>   
                    <h6 class="text-small"> <%= data[i].members[0] %> </h6>
                  </li>
                <% } %>

              </ul> 
        </div>
        <div class="col-9">
            <div class="chat-room">
                <ul class="list-group chat-content">
                </ul>
            </div>
            <div class="input-group">
                <input class="form-control" id="chat-input">
                <button class="btn btn-secondary" id="send">์ „์†ก</button>
            </div>
        </div>
    </div>
</div>

 

728x90
๋ฐ˜์‘ํ˜•