TIL

23/11/23 TIL __ ejs ๋ฅผ ์ด์šฉํ•ด express ํ™˜๊ฒฝ์—์„œ ์„ค๊ณ„๋œ ๋‚ด์šฉ์„ ๋ณด์—ฌ์ฃผ์ž

GABOJOK 2023. 11. 23. 23:47

 

 

๐Ÿž๏ธ   ์ƒํ™ฉ

ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•จ์— ์žˆ์–ด์„œ ์‚ฌ์‹ค ๋ณด์—ฌ์ง€๋Š” ๋ถ€๋ถ„์€ ๊ฝค๋‚˜ ์ค‘์š”ํ•˜๋‹ค.

๋‚ด์ผ๋ฐฐ์›€์บ ํ”„ ๊ฐ™์€ ๊ฒฝ์šฐ, ๋ฐฑ์—”๋“œ ๊ณผ์ • ์ง„ํ–‰์ž๋ผ๋ฆฌ ๋ชจ์—ฌ์„œ ํ”„๋กœ์ ํŠธ๋ฅผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ํ”„๋ก ํŠธ์™€์˜ ํ˜‘์—… ๊ฒฝํ—˜์ด ์—†์–ด ์ข€ ๊ฑฑ์ •์ด์˜€๋‹ค.

์ด์ „๊นŒ์ง€๋Š” html, css, js๋ฅผ ์ด์šฉํ•ด ๊ธฐ์ดˆ์ ์ธ ๋ถ€๋ถ„์„ ์ง„ํ–‰ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์—, ํฌ๊ฒŒ ์–ด๋ ค์›€์€ ์—†์—ˆ์ง€๋งŒ,

express๋ฅผ ํ™œ์šฉํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›๋Š” ์ƒํ™ฉ์—์„œ ์–ด๋–ป๊ฒŒ ๊ฐ’์„ ์ „๋‹ฌํ•ด์•ผ ํ• ์ง€ ์ •๋ง ๋ง‰๋ง‰ํ–ˆ๋‹ค.

์ผ๋‹จ ๊ณต์‹๋ฌธ์„œ์™€ ์—ฌ๋Ÿฌ ํ™œ์šฉ ์˜ˆ์‹œ๋“ค์„ ๋ณด์•˜๋‹ค.

 

 

 

 

๐Ÿ“ท  ejs ์‚ฌ์šฉํ•˜๊ธฐ

๊ฐ€์žฅ ์ค‘์š”ํ•œ ์ˆ™์ œ์ค‘ ํ•˜๋‚˜๋Š” ๋ณด์—ฌ์ง„ ํ™”๋ฉด์—์„œ, ๋ฒ„ํŠผ์„ ๋ˆŒ๋ €์„ ๊ฒฝ์šฐ์˜€๋‹ค.

ํŒŒ๋žŒ์Šค ๊ฐ’์œผ๋กœ ์œ ์ € id๋‚˜, post id๊ฐ€ ์ „๋‹ฌ์ด ๋˜์–ด์•ผ ํ•˜๋Š” ์ƒํ™ฉ์ธ ๊ฒฝ์šฐ

์–ด๋–ป๊ฒŒ ๊ฐ’์„ ๋„ฃ์–ด์ค˜์„œ ์›ํ•˜๋Š” router๋ฅผ ์‹คํ–‰๋˜๋„๋ก ํ• ์ง€ ๋ง์ด๋‹ค. 

 

๋‹จ์ˆœํžˆ ๊ฐ’์„ ๋ณด์—ฌ์ฃผ๋ฉด์„œ ํ™”๋ฉด์„ ๋ณด์—ฌ์ฃผ๋Š”๊ฑด ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ์–ด์ฃผ๋ฉด ๋˜๋Š”๋ฐ,

๋ณด์—ฌ์ค€ ํ™”๋ฉด์—์„œ ์ด๋ฒคํŠธ๊ฐ€ ์ผ์–ด๋‚œ ๊ฒฝ์šฐ, ์›ํ•˜๋Š” ๋ผ์šฐํ„ฐ๋กœ ์™€์„œ ์ž‘๋™ํ•ด์•ผ ํ–ˆ๋‹ค.

 

 

์ผ๋‹จ ์ฐจ๊ทผ์ฐจ๊ทผ ๋‹ค์‹œ ์‚ดํŽด๋ณด์ž.

1. ๋ฝ‘์€ ๋ฐ์ดํ„ฐ๋ฅผ ํ™”๋ฉด์— ๋ณด์—ฌ์ฃผ๊ธฐ

 

 

๋ผ์šฐํ„ฐ ํ•จ์ˆ˜ ์•ˆ์—์„œ, res.render() ๋ฅผ ์ด์šฉํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ejs ํŒŒ์ผ๋กœ ๋„˜๊ฒจ์ค„ ์ˆ˜ ์žˆ๋‹ค.

res.render('๋„˜๊ฒจ์ค„ ejsํŒŒ์ผ๋ช…'. ,   { ๋ณด๋‚ผ ๋ฐ์ดํ„ฐ ์ด๋ฆ„: ๋ณด๋‚ผ ๋ฐ์ดํ„ฐ ๊ฐ’} )

res.render('modifyUserInfo', {
    userId: req.params.userId,
    data: userData,
    pwd: true,
});

 

modifyUserInfo.ejs ํŒŒ์ผ์—์„œ๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

<input  value="<%= data.description %>" />

 

๋„˜๊ฒจ๋ฐ›์€ ๋ฐ์ดํ„ฐ๋ฅผ ๋งŒ์งˆ๋•Œ์—๋Š” <%= %>๋ฅผ ๊ธฐ๋ณธ์ ์œผ๋กœ  ๋งŽ์ด ์‚ฌ์šฉํ•œ๋‹ค.

 

 

2. ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด params ๊ฐ’์— ๋”ฐ๋ฅธ router๊ฐ€ ๋™์ž‘ํ•˜๊ฒŒ ํ•˜๊ธฐ. GET / POST

 

์˜ˆ๋ฅผ ๋“ค๋ฉด ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅธ ๊ฒฝ์šฐ

api/user/modify/32 ๋ผ๋Š” ์ฃผ์†Œ๋กœ  post์š”์ฒญ์„ ๋ณด๋‚ด์•ผ ๋œ๋‹ค๊ณ  ํ•ด๋ณด์ž.

๊ทธ๋Ÿฐ๋ฐ ๋ฌธ์ œ๋Š” ์ฃผ์†Œ๊ฐ’์ด ๋„˜๊ฒจ๋ฐ›์•„์•ผ ํ•  ๋ฐ์ดํ„ฐ์˜€๋‹ค. 

 

์ฒ˜์Œ์—๋Š” ๋ฒ„ํŠผ์— onclick ๋ฉ”์†Œ๋“œ๋ฅผ ์ค˜์„œ 

ejs ํŒŒ์ผ์˜ ํ•˜๋‹จ์—  script ํƒœ๊ทธ๋ฅผ ์—ด๊ณ , ์ด๋ฒคํŠธ๊ฐ€ ์ผ์–ด๋‚œ ๊ฒฝ์šฐ ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋˜๋„๋ก ์ ์–ด์ค€ ํ›„,

ํ•ด๋‹น ํ•จ์ˆ˜ ๋‚ด๋ถ€์— params ๊ฐ’์„ ๊ฐ€์ ธ์˜ค๋ ค ํ–ˆ๋‹ค. ๋‹น์—ฐํžˆ ์ž˜ ์ž‘๋™ํ• ๊ฑฐ๋ผ๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ ์•ˆ๋œ๋‹ค. ๋ถˆ๋Ÿฌ์™€ ์ง€์ง€ ์•Š์•˜๋‹ค. 

๐Ÿง

 

์•Œ๊ณ ๋ณด๋‹ˆ ejs์˜ ํŠน์„ฑ์ด ์žˆ์—ˆ๋‹ค.

EJS : ์„œ๋ฒ„์ธก์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ํ…œํ”Œ๋ฆฟ์— ๋„ฃ์–ด, ๊ทธ๊ฑธ ํ™œ์šฉํ•ด ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์ „๋‹ฌํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค. 

 

์ž‘๋™ ์ˆœ์„œ๋Š” ์ด๋ ‡๋‹ค. 

๋ณด์—ฌ์ง„ ํ™”๋ฉด์—์„œ ์‚ฌ์šฉ์ž๊ฐ€ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅธ๋‹ค.
๋ฒ„ํŠผ์„ ๋ˆ„๋ฅธ ์ˆœ๊ฐ„ onclick์— ๊ฑธ๋ ค์žˆ๋˜ ํ•จ์ˆ˜ saveUserInfo() ๋ฅผ ์ฐพ๋Š”๋‹ค.
<script> ํƒœ๊ทธ ๋‚ด๋ถ€์— ์žˆ๋˜ saveUserInfo() ํ•จ์ˆ˜๋Š” ํด๋ผ์ด์–ธํŠธ ์ธก์—์„œ ์‹คํ–‰๋œ๋‹ค.

 

ํด๋ผ์ด์–ธํŠธ ์ธก์—์„œ ์‹คํ–‰์ด ๋˜๊ธฐ ๋•Œ๋ฌธ์—, ํ…œํ”Œ๋ฆฟ์— ๋„ฃ์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด์˜ฌ ์ˆ˜ ์—†๋‹ค.

 

๊ทธ๋ ‡์ง€๋งŒ ๋ฐฉ๋ฒ•์€ ์žˆ๋‹ค. 

๋ฐฉ๋ฒ• 1.  ์Šคํฌ๋ฆฝํŠธ ํƒœ๊ทธ์—์„œ ๋ณ€์ˆ˜์— ๋„ฃ์–ด๋‘” ํ›„์— ์‹คํ–‰ํ•˜๊ธฐ.

<script>
  const userId = '<%= user.id %>'; // ํด๋ผ์ด์–ธํŠธ ์ธก JavaScript ๋ณ€์ˆ˜์— ํ• ๋‹น
  function onclickFun(e) {
    e.preventDefault();
    location.href = '/api/user/modify/' + userId; // ํ• ๋‹น๋œ ๋ณ€์ˆ˜ ์‚ฌ์šฉ
  }
</script>

 

ejs์—์„œ ํ…œํ”Œ๋ฆฟ์— ๋‹ด์€ ๋ฐ์ดํ„ฐ๋Š” ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ ์•ˆ์—์„œ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š”๋‹ค.

์„œ๋ฒ„์ธก์—์„œ ์‹คํ–‰๋˜๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ ํด๋ผ์ด์–ธํŠธ ์ธก์—์„œ ๋ฆฌ์Šค๋„ˆ๊ฐ€ ์ž‘๋™ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. 

์ž‘๋™ํ•˜๊ฒŒ ํ•˜๋ ค๋ฉด ์œ„์˜ ์˜ˆ์‹œ์ฒ˜๋Ÿผ ๋ณ€์ˆ˜์— ๋‹ด์•„ ์จ์•ผํ•œ๋‹ค. 

 

 

 

 

๋ฐฉ๋ฒ• 2.  ์Šคํฌ๋ฆฝํŠธ ํƒœ๊ทธ ๋‚ด๋ถ€๊ฐ€ ์•„๋‹Œ, ๋ฒ„ํŠผ์ด๋‚˜ form ํƒœ๊ทธ ๋‚ด๋ถ€์˜ ์†์„ฑ์œผ๋กœ ์ ์–ด์ฃผ๊ธฐ.

 

<form action="/api/user/modify/<%= userId %>" method="POST">
 <button id="Sign_up_save" type="submit" class="btn btn-secondary Sign_up_btn">
  ์ €์žฅํ•˜๊ธฐ
 </button>
</form>

 

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ํ…œํ”Œ๋ฆฟ์— ๋‹ด์€ ๋ฐ์ดํ„ฐ ๊ฐ’์„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. 

๋˜ํ•œ form ํƒœ๊ทธ๋ฅผ ์ด์šฉํ•˜๋ฉด,  action์—๋Š” ์ฃผ์†Œ๋ฅผ, method์—๋Š” ์š”์ฒญ์˜ ์ข…๋ฅ˜๋ฅผ ์ ์–ด์ค„ ์ˆ˜ ์žˆ์–ด์„œ, post ์š”์ฒญ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. 

 

 

 

๐Ÿซ   ๋Š๋‚€์ 

ejs๋Š” ์ผ๋ฐ˜ html๊ณผ ๋งŽ์ด ๋น„์Šทํ•˜๊ฒŒ ์ƒ๊ฒผ๊ณ , ์งง์€ ํŒ€ํ”„๋กœ์ ํŠธ ๊ธฐ๊ฐ„์ด๊ธฐ์—

ํ•ด๋‹น ํ…œํ”Œ๋ฆฟ ์—”์ง„์— ๋Œ€ํ•œ ์‚ฌ์šฉ๋ฒ•๋งŒ ๋ณด๊ณ  ๊ธ‰ํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ํ–ˆ๋Š”๋ฐ,

๊ทธ๋Ÿฐ ๋ถ€๋ถ„๋•Œ๋ฌธ์— ์˜คํžˆ๋ ค ์‹œ๊ฐ„์ด ๋” ๋งŽ์ด ๋“ค์–ด๊ฐ”๋˜ ๊ฒƒ ๊ฐ™๋‹ค.

 

๊ธ‰ํ• ์ˆ˜๋ก ๋Œ€์ถฉ ์‚ฌ์šฉ๋ฒ• ์•Œ๊ฒŸ์œผ๋‹ˆ ๋ฐ”๋กœ ํ•˜๋Š”๊ฒƒ๋ณด๋‹ค

์‚ฌ์šฉํ•˜๊ณ ์ž ํ•˜๋Š” ๋„๊ตฌ์— ๋Œ€ํ•ด ์ข€๋” ํŒŒ์•…ํ•˜๋Š”๊ฒŒ ์˜คํžˆ๋ ค ๋„์›€์ด ๋ ์ˆ˜๋„ ์žˆ๊ฒ ๋‹ค ์‹ถ์—ˆ๋‹ค.

 

 

๋‹ค์Œ ํฌ์ŠคํŒ…์—์„œ๋Š” post ์š”์ฒญ์ด ์•„๋‹Œ delete ์š”์ฒญ์ด๋‚˜,

put ํ˜น์€ patch ๊ฐ™์€ ์š”์ฒญ๋“ค์€ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์•ผํ• ์ง€ ์ ์–ด๋ณด๊ฒŸ๋‹ค.

 

 

 

 

์ฐธ๊ณ ํ•œ ์‚ฌ์ดํŠธ 

https://ejs.co/#docs

 

EJS -- Embedded JavaScript templates

Simple syntax JavaScript code in simple, straightforward scriptlet tags. Just write JavaScript that emits the HTML you want, and get the job done!

ejs.co