토익하느라 포트폴리오 마무리를 잠시 미루다가 다시 실행시켜보니 redirect 실행이 안되면서 에러가 발생했다.

 

게다가 에러 내용이 낯선 에러가 아니라 봤었던 에러였는데 이 에러가 왜 발생했지? 라는 생각이 들었고 결론은, 해결하긴 했지만 원래 잘 동작하던 코드를 고치는 계기가 됐다.

 

고치고보니 사실 원래 이렇게 작성했어야 했던 건가? 라는 생각이 들었다.

 

반복문이 없어져서 코드가 더 빠르고 효율적으로 된건가, 잘 고친 것 같기도 하다.

 

 


 

 

에러 내용

 

[ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client

 

이게 무슨 에러냐면 한 페이지에 두 가지 요청을 보낼 때 발생하는 에러로, 나는 이미 alter 구현할 때 많이 만났던 에러다.

 

로그인을 하려는데 로그인이 안되면서 에러가 발생하고 서버가 멈추는 상황이 발생했고 처음에 나는 저번에 alter 구현하려고 설정하면서 수정된 코드 때문인가 싶어서 그 쪽을 계속 살펴봤으나 아닌 것 같았다.

 

redierct 문제인가 싶어서(콘솔에 저 에러 밑에 express 에러가 떴었기 때문) redirect만 테스트를 해봤는데 redierct는 잘 됐고 따라서 express 문제는 아니었다.

 

이 때 순간적으로, alter 구현하면서 ajax를 사용하게됐고 그 때문인지는 몰라도 이 이후부터 버튼을 한번만 눌렀음에도 두 번 요청이 되는 상태를 발견했던 기억이 떠올랐다.

 

요청이 두 번 되면 같은 페이지에 두 가지 요청을 보내게 되니까 이런 에러가 뜰 수 있겠다 싶었고 프론트엔드에서 ajax를 원래 쓰던 axios로 바꿨지만 소용이 없었다.

 

 

 


 

 

해결

 

다시 백엔드 코드로 돌아와서 로그인 코드를 보고 있는데 문득 반복문 코드가 눈에 밟혔다.

 

로그인 할 때 find 안에서 forEach가 돌아가면서 일치하는 id, password를 찾는 구조인데, 이 코드를 보고 있자니 find만 써도 되지 않나? 라는 생각이 들었고 반복문을 없앴더니 해결됐다.

 

 결론적으로 반복문을 쓰면서 redirect를 여러 번 요청하게 되는 것 때문에 저 에러가 떴던 것 같은데 원래는 잘 돌아가는 코드였는데 왜 갑자기 에러가 났는 지는 모르겠지만 반복문을 덜어냈으니 코드가 더 깔끔해진 것 같아서 괜찮은 것 같다.