순수한 창작은 아니다
0. 공통 파일
0.1 index.ejs
<!DOCTYPE html>
<html lang="ko">
<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>팀이름</title>
<base href="/" />
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<script src="https://code.jquery.com/jquery-3.5.1.js"></script>
<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
<link
href="https://fonts.googleapis.com/css2?family=Noto+Sans+KR:wght@100;300;400;500;700;900&display=swap"
rel="stylesheet"
/>
<link rel="stylesheet" href="/css/css 여럿있음.css" />
.......
</head>
<body>
<main>
<!-- login -->
<% if (pageName==="login" ) { %> <%- include("components/login") %> <% }
%>
<!-- signup -->
<% if (pageName==="signup" ) { %> <%- include("components/signup") %> <% }
%>
<!-- userUpdate -->
<% if (pageName==="userUpdate" ) { %> <%- include("mypage/userUpdate") %> <% }
%>
<!-- logout -->
<% if (pageName==="logout" ) { %> <%- include("components/logout") %> <% }
%>
이해에 필요한 것과 내가 쓴 것만 가져옴
이 코드에서 로그아웃은 필요없어서 뺌
1.회원가입
우선 회원 가입부터
1.1 signup.js
프런트 에서 ejs와 연결된 js, 이게 ejs에서 보낼 파일을 조정해주고 벡엔드 파일에 보냄
맞는지는 사실 잘 모름
//public/js/signup.js
function signup_user() {
const email = $("#email").val();
const phone_number = $("#phone_number").val();
const password = $("#password").val();
const name = $("#name").val();
const address = $("#address").val();
const re_email = /^[a-z0-9]+@[a-z0-9]+\.[a-z]{2,3}$/;
if (!email || !password || !address || ! phone_number || !name) {
alert("빈칸 없이 채워주세요.");
} if (email.search(re_email) === -1) {
alert('ID의 형식이 일치하지 않습니다');
} else {
$.ajax({
type: "post",
url: "api/signup",
data: {
email,
phone_number,
password,
name,
address
},
success: function (response) {
alert(`${email}님 회원가입이 완료되었습니다`);
location.href = "/login";
},
error: function (error) {
alert("회원가입 실패");
console.log("에러이유:", error);
},
});
}
}
1.2 회원가입 ejs
//views/components/signup.ejs
<div class="sign_wrap">
<div class="register_wrap">
<h2>회원가입</h2>
<input
type="text"
name="email"
id="email"
placeholder="이메일"
/>
<input
type="text"
name="name"
id="name"
placeholder="성함"
/>
<input
type="text"
name="address"
id="address"
placeholder="주소"
/>
<input
type="text"
name="phone_number"
id="phone_number"
placeholder="전화번호"
/>
<input
type="text"
name="password"
id="password"
placeholder="비밀번호"
/>
<input
type="button"
name="login_button"
class="user_signup"
onclick="signup_user()"
value="회원가입 하기"
/>
</div>
</div>
<script src="/js/signup.js"></script>
</form>
</body>
ㄹㅇ 그냥 html 편하게 쓰는 느낌이 든다
팀원이 css를 워낙 잘하셔서 그쪽으로 자동으로 넘어감
구현된 모습인데 왜 사진이 회색으로 나왔는지는 모르겠다
1.3 문제점
signup.js의 몇 기능이 안 먹힌다
const re_email = /^[a-z0-9]+@[a-z0-9]+\.[a-z]{2,3}$/;
} if (email.search(re_email) === -1) {
alert('ID의 형식이 일치하지 않습니다');
사실 백엔드 파일을 이전 조에서 얻어온 코드를 좀 수정해서 넣었는데
이것도 거기의 코드 일부
이메일을 형식에 맞게 써주게 하는 건데 여기서 안먹힘
해보니까 먹혔다
2. 로그아웃
좀 많이 해맸다
이게 왜 ejs가 필요한지 잘 몰랐고, 그냥 프론트에서만 하는 방법은 잘 안먹혔고
백엔드 파일을 써먹고도 싶었다
페이지가 구현 되는건 아니잖아
그래서 헤더에 있는 로그아웃 버튼에 꼴아박음
$(document).ready(function () {
findToken();
});
function findToken() {
const token = document.cookie;
let empty_html = ``;
if (token) {
empty_html = `<a href="api/logout">
<li class="header_logout">로그아웃</li>
</a>
그냥 로그아웃 벡엔드에 페치 걸었다
2.1 문제점
이거 로그아웃 되었다고 창을 띄워야 하지않나?
여기서 하자니 할 줄 모름
ejs 새로 만드는 것도 이상함
3. 회원정보 수정
고통의 핵심
이거 하자고 5시에 잤다
ejs
<div class="sign_wrap">
<div class="register_wrap">
<h2>회원정보 수정</h2>
<input
type="text"
name="name"
id="name"
placeholder="성함"
/>
<input
type="text"
name="address"
id="address"
placeholder="주소"
/>
<input
type="text"
name="phone_number"
id="phone_number"
placeholder="전화번호"
/>
<input
type="text"
name="currentPassword"
id="currentPassword"
placeholder="현재 비밀번호"
/>
<input
type="text"
name="newPassword"
id="newPassword"
placeholder="새로운 비밀번호"
/>
<input
type="text"
name="confirmedPassword"
id="confirmedPassword"
placeholder="새로운 비밀번호 확인"
/>
<input
type="button"
name="login_button"
class="user_signup"
onclick="update_user()"
value="회원정보 수정 하기"
/>
</div>
</div>
<script src="/js/mypage/userUpdate.js"></script>
</form>
</body>
프론트 js
function update_user() {
const name = $("#name").val();
const address = $("#address").val();
const phone_number = $("#phone_number").val();
const currentPassword = $("#currentPassword").val();
const newPassword = $("#newPassword").val();
const confirmedPassword = $("#confirmedPassword").val();
if (!name && !address && !phone_number && !currentPassword && !newPassword && !confirmedPassword) {
alert("어떤 정보도 입력되지 않았습니다.");
} if (currentPassword != null || currentPassword == newPassword){
alert('현재 비밀번호와 바꿀 비밀번호가 같습니다, 다르게 수정해주세요')
} if (newPassword !== confirmedPassword){
alert("새로운 비밀번호 확인이 틀렸습니다.");
} else {
$.ajax({
type: "put",
url: "http://localhost:4000/api/user",
data: {
name,
address,
phone_number,
currentPassword,
newPassword,
confirmedPassword
},
success: function (response) {
alert(`${name}님 회원정보가 수정되었습니다`);
location.href = "/";
},
error: function (error) {
alert("정보수정 실패");
console.log("에러이유:", error);
},
});
}
}
3.1 문제점
현재 나온 버그.. 근데 못했으니까 버그라고 하긴 그렇지
벡엔드에서는 이게 비번 수정 안하면 수정이 안되는 버그가 있었는데
if 걸어서 해결함
얘는 답도 없음
3.1.1 문제점 1
백엔드 덕인지 비밀번호 안 적어도 db로 넘어는 간다
근데 새로운 비밀번호랑 현재 비밀번호랑 같다고 뜸
이러면 정보가 넘어가서도 안 되는데 왜 넘어감?
3.1.2 문제점 2
성함, 주소. 전번 중 안 적은건 null이 된다
원래 이메일로 들어가야 할걸 귀찮아서 입력 정보 중 성함으로 넣었는데
null 드렁가서 저 꼴 남
님 도르신?
날 죽여라