๊ทธ ์ ์ ๊ทธ๋ฅ node.js๋ router, utils๋ง ๊ฐ์ง๊ณ ๊ตฌํํด๋จ๋ Confetti Cuisine ์บก์คํค ํ๋ก์ ํธ๋ฅผ
express.js๋ฅผ ์ด์ฉํ ํ๋ก์ ํธ๋ก ๋ฐ๊ฟ๋ดค๋ค.
๋จผ์ ์ต์ข ํ๋ก์ ํธ์ ๊ตฌ์กฐ๋ ์ด๋ ๊ฒ ๋๋ค.
1. ์ ํ๋ฆฌ์ผ์ด์ ์ด๊ธฐํ
์ฌํ ํด์๋ ๊ฒ๊ณผ ๊ฐ์ด npm init ๋ช ๋ น์ผ๋ก package.json์ ์ด๊ธฐํ ํ๋ค.
์์ ํฌ์ธํธ๋ main.js ๋ก ํ๋ค.
npm install ๋ช ๋ น์ด๋ก express, ejs, express-ejs-layouts, http-status-codes ํจํค์ง๋ฅผ ์ค์นํ๋ค.
๊ทธ๋ ๊ฒ ์์ฑ๋ package.json ํ์ผ์ ์ด์ด์ script์์ญ์
"start": "node main.js"๋ฅผ ์ถ๊ฐํ๋ค.
์ต์ข ์ ์ผ๋ก package.json ํ์ผ์
์ด๋ฐ ๋ชจ์์ด ๋๋ค.
๋์ฌ๊ฒจ ๋ด์ผํ ๋ถ๋ถ์๋ง ๋นจ๊ฐ์์ผ๋ก ํ์ํ๋ค.
์์ธ์ง ๋ชจ๋ฅด๊ฒ ์ง๋ง, http-status-codes ํจํค์ง๋ฅผ ์ฐ์ ๋๋ฒ ์ค์นํ๋๋ ๋ฒ์ ์ด ๋ค๋ฅธ ๋๊ฐ๊ฐ ์ค์น๋๊ณ ,
layouts๋ express-ejs-layouts์ ์ค์นํด์ผ ๋๋๋ฐ ๊ทธ๋ฅ layouts์ ์ค์นํด์ ์ ๋ ๊ฒ ๋๋ค..^^
์ํผ ์ด๋ ๊ฒ ์ ํ๋ฆฌ์ผ์ด์ ์ด๊ธฐํ๋ฅผ ๋ง์ณค๋ค.
2. ์ ํ๋ฆฌ์ผ์ด์ ์ ์
์ด์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ด๊ธฐํ๋ฅผ ๊ฑฐ์ณ์ Express.js ๋ฒ์ ์ผ๋ก ์ค๋น๊ฐ ๋๊ณ ,
main.js ํ์ผ์ ๋ง๋ค ์ฐจ๋ก๋ค.
๋จผ์ ์ด๋ ๊ฒ ํ์ํ ์์๋ค์ ๋ชจ์กฐ๋ฆฌ ์ ์ํ๋ค.
port ๋ฒํธ๋ฅผ ์ ์ฅํ๊ณ , http, http-status-codes, content-types(์ฌ์ค ํ์์์), express, express-ejs-layouts ํจํค์ง๋ค์ ๊ฐ์ ธ์ค๊ณ ,
์ ์ธํ homeController, errorController๋ฅผ ๊ฐ์ ธ์จ๋ค.
๊ทธ๋ฆฌ๊ณ app ์์๋ฅผ express ๊ฐ์ฒด๋ก ์ด๊ธฐํํ๋ค.
๊ทธ๋ฆฌ๊ณ ์ด์ app ์ธํ ์ ํ๋ค.
(12ํ์ ๋ญ์ง ๋ชจ๋ฅด๊ฒ ์ ๊ฑ ํ๋ผ๋ฏธํฐ ์ค๊ณ ๊ฐ๋ post ์์ฒญ ๋ฐ์๋ค์ผ ์ธํ ์ธ๊ฐ....?)
ejs๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด view engine์ ์ธํ ํ๊ณ , layouts ์ฌ์ฉ์ ์ธํ ํ๊ณ , ์์ ์ฌ์ฉ์ ์ํ static ํจ์๋ ์ธํ ํ๋ค.
** ์ฌ๊ธฐ์ static ํจ์๋ฅผ ์ฌ์ฉํด์ ๋ฏธ๋ฆฌ ๊ฒฝ๋ก๋ฅผ ์ ์ด ๋๋๊ฒ ์ข์ ์ ์ด, ์์ ๋ค์ด ์ถ๊ฐ๋ ๋๋ง๋ค ์์ ์ฒ๋ผ
app.get("/scripts.js", (req, res) => {
res.writeHead(httpStatus.OK, contentTypes.js);
utils.getFile("public/js/scripts.js", res);
});
์ด๋ ๊ฒ ๋ผ์ฐํฐ๋ฅผ ํ๋ํ๋ ์ ์ด์ ์ฒ๋ฆฌํ๋ ๊ณผ์ ์ด ํ์ํ๋ค. (router.js, utils.js ํ์ผ๋ค๋ ํ์ํ์)
๊ทผ๋ฐ
app.use(express.static("public"));
์ ๊ฑฐ ํ ์ค๋ง ์ ์ด๋์ผ๋ฉด html ํ์ผ ํน์ ejs ํ์ผ์์ ์ ๊ฒฝ๋ก๋ฅผ ์ค์ฌ์ผ๋ก ์๋๊ฒฝ๋ก๋ง ์ ์ผ๋ฉด ๋ชจ๋ ์์ ์ ์ฌ์ฉํ ์ ์๊ฒ ๋๋ค.
๊ทธ๋ฆฌ๊ณ 17ํ~23ํ์์ ๋ณด์ด๋ ๊ฒ ์ฒ๋ผ ์ ์ ์์ฒญ ๋ฐ์ดํฐ๋ฅผ ํ์ฑํ ์ค๋น๋ฅผ ํ๊ธฐ ์ํด body-parser๋ฅผ ์ถ๊ฐํ๋ค.
์ด๊ฒ์ URL ์ธ์ฝ๋์ JSON ํ๋ผ๋ฏธํฐ ์ฒ๋ฆฌ๋ฅผ ์ํ ์ฝ๋์ด๋ค.
3. ๋ผ์ฐํธ์ ์ถ๊ฐ
์ ๊ธฐ๊น์ง ๋ค ํ์ผ๋ฉด ์ด์ ํ์ด์ง๋ฅผ ์๋ค ๊ฐ๋ค ํ๊ธฐ ์ํ ๋ผ์ฐํธ๋ฅผ ์ถ๊ฐํ๋ค.
๋จผ์ ๊ทธ ์ ์ ๊ทธ ๊ณผ์ ์ ์ฒ๋ฆฌํด์ค controller๋ฅผ ์์ฑํ๋ค.
์ด๊ฑด homeController.js์ด๋ค. ์์ฒญ๋ ๋ผ์ฐํธ์ ejs ํ์ผ์ ์ด์ฉํด ์๋ตํ๋ค.
์ฒซ๋ฒ์งธ showIndex๋ผ๋ ํจ์๋ ์ฑ ์๋ ์๋๋ฐ ํํ๋ฉด์ผ๋ก ๊ฐ ๋ ํ์ํ ๊ฒ ๊ฐ์์ ๊ทธ๋ฅ ๋ด๊ฐ ์ถ๊ฐํ๋ค.
๊ทธ๋ฆฌ๊ณ ๋๋ฒ์งธ showCourses ํจ์์์ ejs ํ์ผ์ courses๋ผ๋ ๊ฐ์ฒด ํ๋ผ๋ฏธํฐ๋ฅผ ํจ๊ป ์ ๋ฌํด์ฃผ๊ธฐ ๋๋ฌธ์ ์ ๋ ๊ฒ ์ ์ธํ๋ค.
๊ทธ๋ค์์ errorController์ด๋ค.
404 ์๋ฌ์ 500์๋ฌ์ ๋๋นํ๋ ํจ์๋ค์ ์ ์ํ๋ค.
404 ์๋ฌ์ผ ๋๋ error์ฝ๋์ ํจ๊ป error.ejs ๋ทฐ ํ์ด์ง๋ก ๋์ด๊ฐ๊ฒ ๋๋ค.
4. ๋ทฐ๋ก ๋ผ์ฐํ (๋ ์ด์์ ์ฌ์ฉ)
ํ์ฌ๊น์ง ์ด ์บก์คํค ์น์ ํ๋ฆฌ์ผ์ด์ ์์ ํ์ํ view์ ๋ชฉ๋ก์ ์ด๋ ๋ค. (์ฑ ์ฐธ๊ณ ํจ)
ํ์ผ๋ช | ๋ชฉ์ |
layouts.ejs | ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฉ์ธ ์คํ์ผ๋ง๊ณผ ๊ธฐ๋ณธ ํ์ ๊ธฐ๋ฅ ์ํ |
index.ejs | ํํ์ด์ง ์ฝํ ์ธ ๋ฅผ ๋ง๋ค์ด๋ |
courses.ejs | ์ฝ์ค ์ฝํ ์ธ ์ ๋์คํ๋ ์ด |
contact.ejs | ์ฐ๋ฝ์ฒ ์์์ ๋์คํ๋ ์ด |
thanks.ejs | ์์ ์ ์ถ ํ ๊ฐ์ฌ ๋ฉ์์ง ๋์คํ๋ ์ด |
error.ejs | ํ์ด์ง๋ฅผ ์ฐพ์ ์ ์๋ ๊ฒฝ์ฐ ๋์คํ๋ ์ด |
๊ทธ๋์ ์ด 6๊ฐ์ง์ ๋ทฐ๋ฅผ ์์ฑํ๋ค.
๋จผ์ ํค๋๋ Navigation bar, Footer ๋ถ๋ถ์ด ๋ ๋ฐ๋ณต๋๋๋ฐ ์ด์ ๊ทธ๊ฑธ layouts์ ์ด์ฉํ๋ฉด ๊น๋ํ๊ฒ ํ ์ ์๊ฒ ๋๋ค.
์ด๋ ๊ฒ layout์ ์ ์ํด๋์ผ๋ฉด ์๋ก์ด ๋ทฐ๊ฐ ๋ ๋๋ง ๋์ ๋ layout.ejs ํ์ผ์ ๊ฑฐ์ณ์ <%- body%> ๋ถ๋ถ์ด ๋ ๋๋ง ๋ ํ๊ฒ ์ฝํ ์ธ ๋ก ๋์ฒด ๋๋ค.
๊ทธ๋ผ ๋ค๋ฅธ ๋ทฐํ์ผ๋ค์
์ด๋ ๊ฒ body์์ ๋ด์ฉ, ๋ด์ฉ์ด ๋ฐ๋๋ section ๋ถ๋ถ๋ง ์ ์ด๋์ผ๋ฉด ๋๋ค.
5. ๋ทฐ์ ์ฝํ ์ธ ์ ๋ฌ
๋์ค์ DB๋ฅผ ์ฌ์ฉํ๋ฉด ์ ๋ณด๋ฅผ ์ถ๋ ฅํ๊ธฐ ์ํด ๋ฆฌ์คํธ ํํ๋ก ํ๋ผ๋ฏธํฐ๊ฐ ๋ค์ด์ฌ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ๊ทธ๋ ์ฌ์ฉํ๋ ๋ฐฉ์๊ณผ ๋น์ทํ๊ฒ forEach๋ฌธ์ ์ฌ์ฉํ์ฌ ๋ฐฐ์ด ๊ฐ์ฒด๋ฅผ ์ ๋ฌํด์ ๋ทฐ์ ์ถ๋ ฅํ๋ ๊ฑธ ํด๋ดค๋ค.
๋จผ์ ์ผ๋จ DB๊ฐ ์๊ธฐ ๋๋ฌธ์ ์ถ๋ ฅํ ์ฝํ ์ธ ๋ค์ homeController ์์์ ๋ฐฐ์ด ๊ฐ์ฒด๋ฅผ ์์๋ก ์์ฑํ๋ค.
๋์ค์๋ ์ปจํธ๋กค๋ฌ์์ DB์ ์ ๊ทผํด ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ฌ ๊ฒ ๊ฐ๋ค.
์ด๋ ๊ฒ ๋ฆฌ์คํธ์ ๊ฐ ์์๊ฐ title, cost๋ฅผ ๊ฐ๊ฒ courses๋ผ๋ ์ด๋ฆ์ผ๋ก ๋ฐฐ์ด ๊ฐ์ฒด๋ฅผ ์ ์ธํ๋ค.
๊ทธ๋ฆฌ๊ณ "/courses" ์์ฒญ์ ์ฒ๋ฆฌํ๋ ํจ์ showCourses ํจ์์
res.render("course", {offeredCourses : courses});
์ฝ๋๋ฅผ ์ถ๊ฐํ์ฌ offeredCourses ๋ผ๋ ์ด๋ฆ์ผ๋ก ๊ฐ์ฒด๋ฅผ ๋ทฐ์ ์ ๋ฌํ๋ค.
์ด๋ ๊ฒ ํ๋ฉด ๋ทฐ์์ offeredCourses๋ก ๋ฐฐ์ด์ ์ ๊ทผํ์ฌ ์ ๋ณด๋ฅผ ์ถ๋ ฅํ ์ ์๊ฒ ๋๋ค.
์ด๋ ๊ฒ ํ๋ฉด Express.js ์น ํ๋ ์ ๊ธฐ๋ฐ์ผ๋ก ์บก์คํค ํ๋ก์ ํธ๋ฅผ ์์ ํ๋ ๊ฑด ๋์ด ๋๋ค.
๊ทธ๋์ ์์ฑ๋ ์น ์ดํ๋ฆฌ์ผ์ด์ ๋ทฐ๋ ์ด๋ ๋ค.
'โ๏ธ 21-2 IPP > Node.js study' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Node.js - 15 Mongoose๋ฅผ ์ฌ์ฉํ ๋ชจ๋ธ ์ ์ (0) | 2021.10.29 |
---|---|
Node.js - 14 ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ (0) | 2021.10.28 |
Node.js - 12 ์ค์ ๊ณผ ์๋ฌ์ฒ๋ฆฌ (0) | 2021.10.26 |
Node.js - 11 ๋ทฐ์ ํ ํ๋ฆฟ, ๋ ์ด์์ (0) | 2021.10.25 |
Node.js - 10 Express.js (0) | 2021.10.21 |
๋๊ธ