๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
โœ๏ธ 21-2 IPP/Node.js study

Node.js - 11 ๋ทฐ์™€ ํ…œํ”Œ๋ฆฟ, ๋ ˆ์ด์•„์›ƒ

by hanwitjus 2021. 10. 25.

๋ทฐ์™€ ํ…œํ”Œ๋ฆฟ์˜ ์—ฐ๊ฒฐ

 

ํ…œํ”Œ๋ฆฟ ์—”์ง„์€ Express.js๊ฐ€ ๋ทฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ณ  ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ฝ์„ ์ˆ˜ ์žˆ๋Š” HTML ํŽ˜์ด์ง€๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•˜๋Š” ์—”์ง„์ด๋‹ค.

ํ…œํ”Œ๋ฆฟ์˜ ์‚ฌ์šฉ์œผ๋กœ ๋ทฐ์— ๋™์  ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฝ์ž…ํ•˜๋Š” ์ฝ”๋”ฉ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

ํŒจํ‚ค์ง€ ๋‹ค์šด๋กœ๋“œ๋ฅผ ์œ„ํ•ด

npm install ejs --save ๋ช…๋ น์„ ์‹คํ–‰ํ•˜์—ฌ ejs ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•œ๋‹ค.

 

์ด์ œ ejs๋ฅผ ํ…œํ”Œ๋ฆฟ์šฉ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฒ ๋‹ค๊ณ  ์•Œ๋ ค์ฃผ๊ธฐ ์œ„ํ•ด, main.js ์•„๋ž˜์—

app.set("view engine", "ejs")๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค.

 

 

๊ทธ๋Ÿผ ์ฝ”๋“œ๋Š” ์ด๋ ‡๊ฒŒ ๋œ๋‹ค.

์ฒ˜์Œ์— app.set("view engine", "ejs") ์ฝ”๋“œ ์ถ”๊ฐ€ ์•ˆํ•œ ์ƒํƒœ๋กœ ์‹คํ–‰์‹œ์ผœ์„œ ์˜ค๋ฅ˜๊ฐ€ ๊ณ„์† ๋‚ฌ์—ˆ๋‹ค. ์‚ฝ์งˆ;;

 

 

index.ejs

views ํด๋” ๋ฐ‘์— index.ejs ํŒŒ์ผ์„ ๋งŒ๋“ค๊ณ  ๊ฐ„๋‹จํ•˜๊ฒŒ ์œ„์™€ ๊ฐ™์ด html ์ฝ”๋“œ๋ฅผ ์งฐ๋‹ค.

 

helloController.js

๊ทธ๋ฆฌ๊ณ  ์ด๊ฑด ์ปจํŠธ๋กค๋Ÿฌ. ๋ฐ‘์— respondWithName ์ด๋ผ๋Š” ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ๋ทฐ๋ฅผ ๋žœ๋”๋ง ํ•œ๋‹ค.

 

๊ทธ๋Ÿผ ์ด์ œ index.js์˜ 40ํ–‰

app.get("/name", helloController.respondWithName) 

์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋˜์–ด url์— localhost:3000/name์„ ์ž…๋ ฅํ•˜๋ฉด,

 

๊ฒฐ๊ณผ๊ฐ€ ์ด๋ ‡๊ฒŒ ์ž˜ ๋‚˜์˜จ๋‹ค. 

 

 

 

์ปจํŠธ๋กค๋Ÿฌ๋ถ€ํ„ฐ์˜ ๋ฐ์ดํ„ฐ ์ „๋‹ฌ

 

๋ผ์šฐํŠธ๋ฅผ ๋ณ€๊ฒฝํ•ด ๊ฒฝ๋กœ์—์„œ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๊ฐ€์ ธ์˜จ ๋‹ค์Œ ํ•ด๋‹น ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๋ทฐ๋กœ ๋ณด๋‚ธ๋‹ค.

JavaScript ๊ฐ์ฒด ๋‚ด์—์„œ ๋ณ€์ˆ˜๋ฅผ ์ „๋‹ฌํ•˜๋ฉด ๋œ๋‹ค. ์ด๋ฆ„์€ ๋ทฐ์—์„œ์˜ ๋ณ€์ˆ˜์˜ ์ด๋ฆ„๊ณผ ์ผ์น˜ํ•ด์•ผ ํ•œ๋‹ค.

 

 

๋ผ์šฐํŠธ์˜ ์ฝ”๋“œ๋Š” 

 

 

์ด๋ ‡๊ฒŒ ๋œ๋‹ค. 

 

 

์ด์ œ ์ด ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด, ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ˆ˜์ •ํ•œ๋‹ค.

 

์ด๋ ‡๊ฒŒ ์š”์ฒญ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ง€์—ฐ ๋ณ€์ˆ˜๋ฅผ ํ• ๋‹นํ•˜๊ณ , ๋ Œ๋”๋ง ๋œ ๋ทฐ๋กœ ๊ทธ ๋ณ€์ˆ˜(name)๋ฅผ ์ „๋‹ฌํ•œ๋‹ค.

 

๊ทธ๋ฆฌ๊ณ  index.ejs์—์„œ๋Š” 

<let name = "Jon"; %>์„ ์‚ญ์ œํ•˜๊ณ 

 

 

์ด๋ ‡๊ฒŒ๋งŒ ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•œ๋‹ค.

 

์ด๋ ‡๊ฒŒ ๋‹ค ๊ณ ์น˜๊ณ  ๋Œ๋ ค๋ณธ ์‹คํ–‰ ๊ฒฐ๊ณผ๋Š”

 

์ž˜ ๋‚˜์˜จ๋‹ค.

 

 

 

์š”์†Œ ๋ฐ ๋ ˆ์ด์•„์›ƒ ์„ค์ •

 

๋ ˆ์ด์•„์›ƒ์ด๋ž€ ์›น ์‚ฌ์ดํŠธ๋ฅผ ํƒ์ƒ‰ํ•  ๋•Œ ํŽ˜์ด์ง€๋งˆ๋‹ค ๋ณ€๋™๋˜์ง€ ์•Š๋Š” ์ปจํ…์ธ ๋ฅผ ๋งํ•œ๋‹ค.

 

๋ ˆ์ด์•„์›ƒ์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๋จผ์ € express-ejs-layouts ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•œ๋‹ค.

 

npm install express-ejs-layouts --save ๋ช…๋ น์„ ์‹คํ–‰ํ•œ๋‹ค.

 

ํŒจํ‚ค์ง€๊ฐ€ ๋‹ค ์„ค์น˜๋˜์—ˆ์œผ๋ฉด,  index.ejs ์—์„œ

const layouts = require("express-ejs-layout")์„ ์„ ์–ธํ•˜๊ณ , 

 

Express.js๊ฐ€ ์ด ํŒจํ‚ค์ง€๋ฅผ ์ถ”๊ฐ€ ๋ฏธ๋“ค์›จ์–ด๋กœ ์‚ฌ์šฉํ•˜๋„๋ก main.js์— app.use(layouts)๋ฅผ ์•„๋ž˜์™€ ๊ฐ™์ด ์ถ”๊ฐ€ํ•œ๋‹ค.

**์ด๋•Œ app.use(layouts)๋Š” app.get("/name/:myName", homeController.respondWithName) ๋ณด๋‹ค ์•ž์— ์œ„์น˜ํ•ด์•ผํ•œ๋‹ค.

๋’ค์—๋‹ค๊ฐ€ ์„ ์–ธํ•˜๋‹ˆ๊นŒ ์ ์šฉ์ด ์•ˆ๋์Œ...

 

 

์•”ํŠผ ์ด๋ ‡๊ฒŒ ์ฝ”๋”ฉํ•ด์ฃผ๊ณ , views ํด๋”์— layout.ejs ํŒŒ์ผ์„ ๋งŒ๋“ค์–ด์„œ

 

์ด๋ ‡๊ฒŒ ๋งŒ๋“ค์–ด์ค€๋‹ค. 

 

๊ทธ๋Ÿฌ๋ฉด <%-body%> ์—ฐ์‚ฐ์— ์˜ํ•ด ์ € ์ž๋ฆฌ์—๋Š” index.ejs๊ฐ€ ๋“ค์–ด์˜ค๊ฒŒ ๋˜๊ณ , ํ™”๋ฉด์€

 

 

์ด๋ ‡๊ฒŒ ๋œ๋‹ค.

 

๋งŒ์•ฝ ์š”์†Œ๋ฅผ ๋”ฐ๋กœ ์ถ”๊ฐ€ํ•˜๊ณ  ์‹ถ์œผ๋ฉด ejs ํŒŒ์ผ์„ ์ƒ์„ฑํ•œ ํ›„,

์˜ˆ) <% include particials/navigation %>๋กœ ํฌํ•จ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.

 

ํ‚ค์›Œ๋“œ include๋Š” ์ œ๊ณต๋œ ์ƒ๋Œ€๊ฒฝ๋กœ์—์„œ ์š”์†Œ๋ฅผ ์ฐพ์•„์„œ ๋ Œ๋”๋ง ํ•ด์ค€๋‹ค.

๊ทผ๋ฐ ejs v3.0 ์ด์ƒ๋ถ€ํ„ฐ๋Š” ๋ฌธ๋ฒ•์ด ๋ฐ”๊ปด์„œ <%- include ("particials/navigation") %>์œผ๋กœ ํ•ด์•ผํ•œ๋‹ค๊ณ  ํ•œ๋‹ค.

์ด๋ ‡๊ฒŒ ํ–ˆ๋Š”๋ฐ๋„ ์ž๊พธ ์ด์ƒํ•œ ์˜ค๋ฅ˜๋‚˜์„œ ๋‚ด์ผ ๋‹ค์‹œ ํ•ด๋ด์•ผ๊ฒ ์Œ ์ง€๊ธˆ์€ ์ง‘์ค‘๋ ฅ ์ƒ์‹ค..

 

์ด๋ ‡๊ฒŒ ์ž๊พธ ํŒŒ์ผ์„ ์ฐพ์„ ์ˆ˜ ์—†๋‹ค๊ณ  ํ•จ;;;

 

 

 

 

(+ 21.10.25 17:51 ์ˆ˜์ •)

์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€ ์ฝ์–ด๋ณด๋ฉด ๋ฌธ๋ฒ•์ด ์ž˜๋ชป ๋œ๊ฒŒ ์•„๋‹ˆ๋ผ ๊ทธ๋ƒฅ ๊ฒฝ๋กœ์— ํ•ด๋‹นํ•˜๋Š” ํŒŒ์ผ์„ ๋ชป์ฐพ์•˜๋‹ค๊ณ  ํ•˜๋Š”๊ฑฐ๋ผ์„œ ๊ฒฝ๋กœ๋ฅผ ์ƒ๋Œ€๊ฒฝ๋กœ๋กœ ๋งž์ถฐ์„œ 

 

์ด๋ ‡๊ฒŒ ์ ์–ด์คฌ๋”๋‹ˆ

 

 

 

 

์•„์ฃผ ์ž˜ ์ถœ๋ ฅ๋จ...

 

 

 

LIST

๋Œ“๊ธ€