Node-js-1
Node-js - Log in ๊ธฐ๋ฅ ๋ง๋ค๊ธฐ
Express()
Routes, MVC์ค๊ณ ๋ชจ๋ธ : M(Module)V(Views)C(Controller)
app.set(โview engineโ, ejs)
Express๋ก ์๋ฒ ๋์ฐ๊ธฐ (nodejs ์ค์น ํ, ์๋ฒ ์์ฑ)
ํฐ๋ฏธ๋ ๋ช
๋ น์ด
npm install express โsave express module ์ค์น
node modul๋ด์ express module ์์ฑ, package.json ์์ ์ค์ ๊ด๋ฆฌ๊ฐ ๊ฐ๋ฅํ ์ ์๊ฒ ํจ.
const express = require("express");
const app = express();
app.listen(3000, function () {
console.log("์๋ฒ๊ฐ๋");
});
๋ก์ปฌ ํธ์คํธ : 3000 ์ ์์ console์ ์๋ฒ๊ฐ๋ ๋ฉ์ธ์ง ์ถ๋ ฅ, ํํ์ด์ง ์คํ ๊ฐ๋ฅ
๋ฃจํธ์์ ์ถ๋ ฅํ๊ฒ ํ๋ ค๋ฉด ?
const express = require("express");
const app = express();
app.get("/", (req, res) => {
res.send("์ฌ๊ธฐ๋ ๋ฃจํธ์
๋๋ค. ");
});
app.listen(3000, function () {
console.log("์๋ฒ๊ฐ๋");
});
login ๊ฒฝ๋ก์์ ์ถ๋ ฅ์?
const express = require("express");
const app = express();
app.get("/", (req, res) => {
res.send("์ฌ๊ธฐ๋ ๋ฃจํธ์
๋๋ค. ");
});
app.get("/login", (req, res) => {
res.send("์ฌ๊ธฐ๋ ๋ก๊ทธ์ธ ํ๋ฉด ์
๋๋ค.");
});
app.listen(3000, function () {
console.log("์๋ฒ๊ฐ๋");
});
http๋ก ์๋ฒ ๋์ฐ๊ธฐ.
const http = require("http");
const app = http.createServer();
app.listen(3001, () => {
console.log("http๋ก ๊ฐ๋๋ ์๋ฒ์
๋๋ค.");
});
์ด ์ํ์์ ์๋ฒ๋ ๋ค์ด๊ฐ ์ ์๋ค.. ํ์ง๋ง โ/โ (๋ฃจํธ) ๊ฐ ์์ด์ ์๋ฒ๊ฐ ์คํ๋์ง ์๋๋ค.
const http = require("http");
const app = http.createServer((req, res) => {
if (req.url === "/") {
res.end("์ฌ๊ธฐ๋ ๋ฃจํธ ์
๋๋ค.");
} else if (req.url === "/login") {
res.end("์ฌ๊ธฐ๋ ๋ก๊ทธ์ธ ํ๋ฉด์
๋๋ค.");
}
});
app.listen(3001, () => {
console.log("http๋ก ๊ฐ๋๋ ์๋ฒ์
๋๋ค.");
});
์ด๋ ๊ฒ require ํ์ ๋, ์ฝ๋ฐฑ ํจ์๋ฅผ ๋ง๋ค์ด์ ํ์ฌ์ ์ํ๋ฅผ ๋ํ๋ด๋ ๊ฐ์ respondํด์ค๋ค.
โ>
ํ์ง๋ง ํ๊ธ์ด ์๋ฌ๋ค !
const http = require("http");
const app = http.createServer((req, res) => {
res.writeHead(200, { "Content-Type": "text/html; charset=utf-8" });
if (req.url === "/") {
res.end("์ฌ๊ธฐ๋ ๋ฃจํธ ์
๋๋ค.");
} else if (req.url === "/login") {
res.end("์ฌ๊ธฐ๋ ๋ก๊ทธ์ธ ํ๋ฉด์
๋๋ค.");
}
});
app.listen(3001, () => {
console.log("http๋ก ๊ฐ๋๋ ์๋ฒ์
๋๋ค.");
});
๊ทธ๋์ ์์ ๊ฐ์ด if ๋ฌธ ์ ์ ๋ค์ ๋ฌธ์ฅ์ ์จ์ ํ๊ธ๋ก ๋ณ๊ฒฝ ์์ผ์ค๋ค.
**http๋ ํ๊ธ ๋ณ๊ฒฝ์ ์ด๋ ค์๊ณผ ์ฝ๋์ ๋ณต์ก์ฑ ๋๋ฌธ์ express ๋ฅผ ์ด์ฉํด์ค๋ค.
๋ก๊ทธ์ธ ํ๋ฉด ๋ง๋ค๊ธฐ. ( ํ๋ ์ฝ๋ฉ )
express๋ฅผ ์ด์ฉํ ๋, ๋ก๊ทธ์ธ ํ๋ฉด์ html์ ๋ณด์ฌ์ค ๋๋ respond์ ๋ณด๋ด์ค๋ค.
app.get("/login", (req, res) => {
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
</head>
<body>
<input type="text" placeholder="์์ด๋" /><br />
<input type="text" placeholder="๋น๋ฐ๋ฒํธ" /><br />
<button>๋ก๊ทธ์ธ</button>
</body>
</html>
});
์ด์ฒ๋ผ respond ํด์ค ๋ html ํ์ผ์ ๋ณด๋ด์ฃผ๋ฉด ํํ์ด์ง๊ฐ ๋์จ๋ค.
๊ทธ๋ฐ๋ฐ ์์ ๊ฐ์ ๋ฐฉ๋ฒ์ ํจ์จ์ ์ด์ง ๋ชปํ๋ค. -> ๋ชจ๋ํ ์์
์ ์งํํ๋ค.
๋ก๊ทธ์ธ ๋ทฐ ์ต์ ํ / MVC์ V (Views) ๋ถ๋ฆฌ
app.js์ ๋ชจ๋ํ๋ฅผ ์ํด ์ธํ
์ ๋ค์๊ณผ ๊ฐ๋ค.
ejs ์์ง์ ์ด์ฉํด์ html ํ์ผ์ด ์๋ ejs ํ์ผ๋ก ์ ๊ทผํ๊ฒ ์ธํ
ํด์ค๋ค.
๋ณด๋ด์ค respond๋ renderํจ์๋ฅผ ํตํด ํด๋์ ์ ๊ทผ ๊ฐ๋ฅํ๊ฒ ๋ง๋ ๋ค.
const express = require("express");
const app = express();
app.set("views", "./views");
app.set("view engine", "ejs");
app.get("/", (req, res) => {
res.render("home/index");
});
app.get("/login", (req, res) => {
res.render("home/login");
});
app.listen(3000, function () {
console.log("์๋ฒ๊ฐ๋");
});
์ด ๋, ํด๋๋ค์ ๋ค์๊ณผ ๊ฐ์ด ๊ตฌ์ฑํด์ค๋ค.
index์ login์์๋ ๊ฐ ์ฃผ์์ ๋ค์ด๊ฐ์ ๋, html์ ๋ณด์ฌ์ค๋ค.
์๋ฒ๋ฅผ ์คํํ๋ฉด ์๋ง ์๋ ๊ฒ์ด๋ค. ejs์์ง์ ์ค์นํด์ผํ๊ธฐ ๋๋ฌธ์ด๋ค.
npm install ejs -s (terminal) ๋ฅผ ์ด์ฉํด์ ์ค์น๋ฅผ ํด์ฃผ์.
์ด ์ํ์์ app.js๋ฅผ ๋ ๊ฐ๋จํ๊ฒ ๋ง๋ค์ด์ฃผ๋ ๋ฐฉ๋ฒ์ ๋ง๋ ๋ค.
๋ผ์ฐํ ๋ถ๋ฆฌ
์ด์ ๋ก๊ทธ์ธ, home์ ์ด์ฉํ๋ ๋ผ์ฐํฐ๋ฅผ ๋ง๋ ๋ค.
routes ํด๋๋ฅผ ๋ง๋ค์ด์ index.js๋ฅผ ๋ง๋ ๋ค.
์ด ์์ ๋ค์๊ณผ ๊ฐ์ด ์ฝ๋๋ฅผ ์ง์ฃผ๊ณ , module์ ๋ฐ์์ ์ธ ์ ์๋๋ก module.exports = router์ ํด์ค๋ค.
//index.js
"use strict";
const express = require("express");
const router = express.Router();
app.get("/", (req, res) => {
res.render("home/index");
});
app.get("/login", (req, res) => {
res.render("home/login");
});
module.exports = router;
routes์ ์์ฒญํ ์ ์๋๋ก requireํด์ฃผ๊ณ , app์์ useํ ์ ์๊ฒ ํ๋ค.
//app.js
"use strict";
// ๋ชจ๋
const express = require("express");
const app = express();
const PORT = 3000;
// routing
const home = require("./routes/home"); // ํ / routes / home / index ํ์ผ ์์ฒญ
// ์ฑ์ธํ
app.set("views", "./views");
app.set("view engine", "ejs");
app.use("/", home); // ๋ฏธ๋ค์จ์ด๋ฅผ ๋ฑ๋กํด์ฃผ๋ ๋ฉ์๋.
app.listen(PORT, function () {
console.log("์๋ฒ๊ฐ๋");
});
** port๋ ๋ณ์๋ก ์ ์ฅํด์ ์ด๋ค. ๊ฐ ์ข ๋ฅ๋ผ๋ฆฌ ๋ฌถ์ด์ ๋ณ์๋ฅผ ๋๋๋ค.
MVC ์ค C (Controller) ๋ถ๋ฆฌํ๊ธฐ
index.js์์ controll ๊ธฐ๋ฅ์ ๋ด๋นํ๋ ๊ฒ์ require, respond ํ๋ ๋ถ๋ถ์ด๋ค.
(req, res) => {
res.render("home/index"); }
์ด ๋ถ๋ถ์ home.ctrl ํด๋์ ๋ฃ์ด ์ปจํธ๋กค์ ํ ์ ์๊ฒ ํ๋ค. ๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ๋ค.
//home.ctrl.js
"use strict";
const home = (req, res) => {
res.render("home/index");
};
const login = (req, res) => {
res.render("home/login");
};
module.exports = {
home,
login,
};
๋ชจ๋์ ๋ค์ ๋บด์คฌ๊ธฐ ๋๋ฌธ์ ๋ฐ์์ ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋๋ก module.exports๋ฅผ ํด์ค๋ค.
** ๊ฐ์ฒด๋ก ๋ณด๋ผ ๋, key : value ํํ์ธ๋ฐ key๋ง ์ด๋ค๋ฉด, key : key ๊ฐ์ผ๋ก ๋ฐ๋๋ค. (ES6 ์ถ๊ฐ ๊ธฐ๋ฅ)
๋ชจ๋์ ๋ณด๋๊ธฐ์ index์์ ์ปจํธ๋กค์ ๊ฐ์ ธ์ฌ ์ ์๋๋ก ํ๋ค.
//index.js
"use strict";
const express = require("express");
const router = express.Router();
const ctrl = require("./home.ctrl");
router.get("/", ctrl.home);
router.get("/login", ctrl.login);
module.exports = router;
app.listen ๋ชจ๋ํ
์ด์ ์ ํ๋ ๊ฒ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก listen๋ถ๋ถ๋ ๋ชจ๋ํ๋ฅผ ํด์ค๋ค.
์ด์ ์คํ์ app.js ๊ฐ ์๋ ./bin/www.js ์์ ์คํํ๋ค.
//www.js
"use strict";
const app = require("../app");
const PORT = 3000;
app.listen(PORT, () => {
console.log("์๋ฒ๊ฐ๋");
});
"use strict";
// ๋ชจ๋
//app.js
const express = require("express");
const app = express();
// routing
const home = require("./routes/home"); // ํ / routes / home / index ํ์ผ ์์ฒญ
// ์ฑ์ธํ
app.set("views", "./views");
app.set("view engine", "ejs");
app.use("/", home); // ๋ฏธ๋ค์จ์ด๋ฅผ ๋ฑ๋กํด์ฃผ๋ ๋ฉ์๋.
module.exports = app;
์ด๋ค ๋ณ์๋ฅผ ๊ฐ์ ธ์ฌ ๋๋ ๋ด๋ณด๋ด๋ ๊ณณ๊ณผ ๊ฐ์ ธ์ค๋ ๊ณณ ๋๋ค ์ ๊ฒฝ์จ์ผํ๋ค.
<์ ๋ฆฌ>์ ๋ฆฌ>
app.js์์ ์๋ฒ ๊ฐ๋ ์คํ.
const express = require("express");
const app = express();
- app์ โexpressโ framework๋ฅผ ์ด์ฉ
const home = require("./routes/home");
- home์ ./routes/home ( ํ -> routes -> home ) ๊ณผ ๊ฐ์ด ๊ฒฝ๋ก๋ฅผ ๊ฐ์ง๋ค.
app.set("views", "./views");
app.set("view engine", "ejs");
- app.set ์ views -> ./views ๋ก ๊ฒฝ๋ก ์ค์ & view engine -> ejs ๋ก ์์ง ์ค์
app.use("/", home);
- app.use(โ/โ, home) ์ ์๋ฏธ๋ ์๋ฒ๊ฐ ๋ฃจํธ์ ์์ ๋ home์ ์คํํ๋ผ๋ ์๋ฏธ.
home ( /routes/home ) ์คํ ์ index.js ์คํ
const express = require("express");
const router = express.Router();
router์ฐ๊ฒฐ
const ctrl = require("./home.ctrl");
ctrl ์คํ ์ ํด๋น ๊ฒฝ๋ก๋ก require
router.get("/", ctrl.home);
router.get("/login", ctrl.login);
router์ ๋ฃจํธ ๊ฒฝ๋ก๊ฐ ์์ ๋, login ๊ฒฝ๋ก๊ฐ ์์ ๋, ctrl๋ด์ ๊ฐ์ฒด ๊ฐ์ผ๋ก ๋ณด๋ด์ค๋ค.
module.exports = router;
router๊ฐ ๋ฐ์์ ์ํ๋ ์์ฒญ์ ๋ฐ์ ์ ์๋๋ก ํด์ค๋ค.
Router๋ถ๋ฆฌ app.use์์ home ์คํ ์ express๋ด์์ ํด๋น ๊ฒฝ๋ก๋ก require ์์ฒญํ๋ ๊ฒ ๊ฐ๋ค. router๋ ๊ทธ ์์ฒญ์ด ์์ ๋ ๋ฐ๋ ๋ฐฉ๋ฒ(?) ๊ฐ๋ค.
ctrl๋ก ์์ฒญ์ ํ์ ๋ home.ctrl์์์ ๋ช ๋ น
const home = (req, res) => {
res.render("home/index");
};
req๊ฐ ์์ ๋ respond๋ app.set์์ ํด์ค view๊ฐ์ผ๋ก ๋ณด์ฌ์ฃผ๊ธฐ ์ํด render์ ํด์ค๋ค.
./views/home/index -> ejsํด๋๋ก ๋์ด๊ฐ๋๋กํ๋ค. // login๋ ๋ง์ฐฌ๊ฐ์ง
โ> render() ์ด๋ผ๋ function ์์ฒด์์ views ๋ด์ ejs ํด๋๋ฅผ ๊ฐ์ ธ์จ๋ค.
Render link
module.exports = {
home,
login,
};
๊ฐ์ฒดํ ์์ผ์ ์ธ๋ถ์์ ์ ๊ทผ ๊ฐ๋ฅํ๋๋ก ํ๋ค.