router.get("/mypage", userscontroller.findUser);
router.get("/me", userscontroller.loginInfo);
router.post("/logout", userscontroller.logoutUser);
테스트로 만들어뒀던 router가 사라지면서 일어난 에러였다.
router.get("/mypage", userscontroller.findUser);
코드를 삭제해주니 서버가 정상적으로 실행된다.
res.status(400).json({ errormessage: error.message });
res 메서드를 이용하여 보내려고 했으나 서버에서 클라이언트로 메시지를 보내는 것은 좋지 않다고 한다.
나와 비슷한 생각을 하는 사람들이 있나 보다. stackoverflow 질문이 꽤 있었다.
출처: https://stackoverflow.com/questions/52212489/access-a-route-send-an-error-alert-and-redirect
클라이언트 측에서 alert
을 발생시키는 것을 권장하고 있다.
서버에서 클라이언트 쪽에 html
코드를 보내서 렌더링할 수 있는 기능이다.
우선 시간상 alert
구현을 최대한 간단하게 하기 위해
res.write('<script>alert('경고 메시지')</script>')
와 같이 구현했더니 경고창이 잘 뜬다.
마이 페이지에서 로그인한 회원 정보(닉네임, 잔여 포인트, 이메일)를 보여주고 싶어 ajax로 회원 정보가 담긴 api를 다음과 같이 호출했다.
function userInfo(){
$.ajax({
type: 'GET',
url: '/api/user/me',
data: {},
success: function (response) {
let rows = response.data
for (let i=0; i < rows.length; i++) {
let nickname = rows[i]['nickname']
let money = rows[i]['money']
let email = rows[i]['email']
let temp_html = `<div class="lead text-muted">POINT: ${money}</div> <div class="lead text-muted">Email: ${email}</div>`
$('#user-info').append(temp_html) }
},
});
}
프론트 화면 상으로는 회원 정보가 나타나지 않아서 network 탭을 확인해봤더니 me
라는 api
는 정상 호출되고 있었다.
network 탭에 불러온 데이터를 자세히 살펴봤더니 답이 나왔다. response 데이터의 변수 명을 잘못 받아오고 있었다.
function userInfo(){
$.ajax({
type: 'GET',
url: '/api/user/me',
data: {},
success: function (response) {
let data = response.info
let money = data['money']
let email = data['email']
let temp_html = `<div class="lead text-muted">POINT: ${money}</div>
<div class="lead text-muted">Email: ${email}</div>`
$('#user-info').append(temp_html)
}
});
}
회원 정보는 info
라는 객체 안에 담겨 있었다. (다른 ajax 코드를 그대로 복붙하고 깊게 생각하지 않았더니 발생한 실수...)
또한 데이터에는 모든 회원 정보가 아니라 로그인한 회원의 정보만 담겨 있으므로 for문
을 사용할 필요가 없었다.
위와 같이 코드를 작성하니 데이터가 잘 불러와졌다.