++진짜 해결!
https://codelist.tistory.com/83
내가 alert를 띄우려고 했던 시도들은 순서대로 아래 글들을 읽어보면 볼 수 있다.
1. https://codelist.tistory.com/61
[Vue.js, Node.js] Node.js에서 보낸 response Vue에서 처리
++해결 [Node.js, Vue.js, Ajax] ::디버깅:: Vue.js alert 넣기 여는 글 먼저 내가 어떤 기능을 구현하고 싶었는 지 간단하게 설명하자면 회원가입 시 DB를 조회한 후 아이디가 이미 존재하면 이미 존재하는
codelist.tistory.com
2. https://codelist.tistory.com/69
[Node.js, Vue.js, Ajax] ::디버깅 실패:: Vue.js alert 넣기
+ 2021.10.18 해결된 줄 알고 글을 작성했으나 알고보니 안됐다. 아래 포스팅을 보면 내가 왜 착각했는 지 나와있다. [Node.js, Vue.js, Ajax] -삽질기록- Vue.js alert 넣기 원래는 패치 내용을 따로 포스팅 할
codelist.tistory.com
3. https://codelist.tistory.com/73
[Node.js, Vue.js, Ajax] -삽질기록- Vue.js alert 넣기
원래는 패치 내용을 따로 포스팅 할 계획이 없었으나 해결이 안되다보니 기록이라도 남기려 작성하게 됐다. 그 김에 앞으로 패치 관련 포스팅은 이 카테고리에서 하도록 하겠다. 내가 올랑상점
codelist.tistory.com
그리고 아래 코드로 성공 했다.
전에도 alert 띄우려고 아래처럼 res.send를 시도해 본 적 있는데 alert 뜨고나면 화면이 다 날라가서 하얀 상태에서 멈춰버려서 페이지 이동이 안되니까 포기했는데 이렇게 쓰면 페이지 이동까지 된다.
res.send("<script>alert('아이디/비밀번호를 입력해주세요.');location.href='/login';</script>");
그러나 테스트를 하다가 두 번째 alert 창을 띄우려고하면 Error: Can't set headers after they are sent. 라는 오류가 생긴다.
이 에러는 전에도 만났던 res.send를 두 번 보냈을 때 생기는 에러다.
에러가 생기는 것도 문제였는데 이 에러가 생기면 서버가 바로 죽어버린다.
배포 시 서버가 죽어버리면 안되기 때문에 try~catch문으로 감싸줬고 서버가 죽지 않고 이어서 잘 실행이 된다.
if(!users || err){ //id가 DB에 없으면(즉, id가 틀렸거나 회원가입이 안되어 있거나)
try{
res.send("<script>alert('아이디가 틀렸습니다.');location.href='/login';</script>");
}catch (exception) {
res.redirect('/login');
}
제일 좋은 건 백엔드->프론트로 response를 전달해서 프론트에서 response를 받아 alert를 띄우는 거지만 지금의 나에겐 이 방식이 최선인 것 같다.
'Node.js' 카테고리의 다른 글
[Node.js, Vue.js] res.json으로 Vue에 값 전달하기 (0) | 2021.12.26 |
---|---|
[Node.js, Vue.js] 탈퇴 기능(mongodb) (0) | 2021.12.21 |
[AWS, Node.js, Vue.js] 배포 후 쿠키 문제 (0) | 2021.11.30 |
[Node.js, Vue.js] {배포 준비} 패스워드 암호화하기(+로그인) (0) | 2021.11.25 |
[Node.js, Vue.js] 로그인 유무에 따라 login/logout 띄우기 (0) | 2021.11.16 |