(도움 받은 링크)
▶️ 로그인 창을 만들어보자. 아이디의 비번의 값을 데이터에 저장해놓고, 입력한 값에 따라 로그인의 성공여부를 화면에 보여준다.
05-mvc-prac>index.js
use()
를 사용해 Router를 미들웨어로 걸어준다.const express = require("express");
const app = express();
const PORT = 8000;
app.set("view engine", "ejs");
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
//Router 정의해서 가져오고 사용하겠다.
const router = require("./routes/user");
app.use("/user", router);
//-----존재하지 않는 get요청에 대해서 처리하기 위한 부분
//얘는 위치도 중요하다. 위에서 부터 읽으니까 !
//위에서 다 걸러져서 왔는데 아무도 특정한 get요청을 받아주지 않을 때 들어온다.
// *은 어떤 라우터든 상관없다는거.
app.get("*", function (req, res) {
res.send("페이지를 찾을 수 없습니다.");
});
app.listen(PORT, function () {
console.log(`Sever Open: ${PORT}`);
});
파일 경로 : 05-mvc-prac>routes>user.js
최상단 index.js
에 작성했다.const express = require("express");
const router = express.Router();
const controller = require("../controller/Cuser");
//기본적으로 /user를 사용하겠다고 정의했기 때문에 아래 주소로 연결되게 된다.
// localhost:8000/user
router.get("/", controller.main);
// localhost:8000/user/login
router.post("/login", controller.login);
//router자체를 모듈화해 객체로 넘겨준다.
module.exports = router;
파일경로 : 05-mvc-prac>controller>Cuser.js
//Model에 있는 데이터를 가져와서 사용하겠다.
//아래는 결국 해당 파일에 작성된 getUser라는 함수를 가져오는 셈이다.
const User = require("../model/User");
//----- 경로와 연결 될 함수 내용을 정의한다.
//메인 페이지에 대한 요청과 응답 부분
exports.main = (req, res) => {
res.render("index");
};
//----- 로그인을 했을 때에 대한 요청과 응답 부분
//Model에서 가져온 데이터는 userData = {id: "jeong", pw: "12345"}
//가져와서 사용하는거기 때문에 함수 안에 새로 정의해준다.
exports.login = (req, res) => {
const userData = User.getUser();
let data;
if (req.body.userid == userData.id && req.body.password == userData.pw) {
data = {
isSuccess: true,
msg: "로그인 성공!",
};
} else {
data = {
isSuccess: false,
msg: "로그인 실패!",
};
}
res.send(data);
};
파일경로 : 05-mvc-prac>model>User.js
exports.getUser = () => {
const id = "jeong";
const pw = "12345";
return { id, pw };
};
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>로그인</title>
<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
</head>
<body>
<h2>로그인</h2>
<form name="login">
<fieldset>
<legend>ID</legend>
<input type="text" name="userid" />
</fieldset>
<fieldset>
<legend>Password</legend>
<input type="password" name="password" />
</fieldset>
<button type="button" onclick="clickLogin()">로그인</button>
</form>
<div class="login-result"></div>
<script>
function clickLogin() {
const form = document.forms["login"];
const data = {
userid: form.userid.value,
password: form.password.value
}
axios({
method: "POST",
url: "/user/login",
data: data
}).then((res) => {
// { isSuccess: ??, msg : ?? }
const {
isSuccess,
msg
} = res.data
const element = document.querySelector(".login-result");
element.innerHTML = msg;
const color = isSuccess ? "blue" : "red";
element.style.color = color
})
}
</script>
</body>
</html>
💬
아주아주 헷갈렸던 내용이다. 내 기억으로는 MVC에 대해 제대로 이해하지도 못한채로 1차 프로젝트를 진행했던 것 같다. 하지만 뭐든 실전에서 배우는게 더 크다고 했던가, 실제로 프로젝트를 진행해보니 이해가 되었었다. 노션에 정리해놓은 날짜는 10월 26일..! 벨로그에 다시 업로드를 하면서 내용을 보니 또 새롭게 이해가 되는 느낌이다. 뒤늦게 업로드하면서복습하는 느낌도 들고 괜찮은거 같기도..하다..!