회원가입 api를 만들고 bcryptjs로 비밀번호 암호화까지 잘 끝냈는데, 갑자기 발생한 에러.
error: illegal arguments: undefined, string
username과 password를 데이터로 전달했는데 undefined가 떴다는 건... 데이터가 정상적으로 보내지지 않는 것으로 보였다. (값을 잘못 입력했다거나 하는)
에러 메시지를 검색을 해보니 bcrypt 함수에서 암호화를 하려다가 값이 없으니 나타나는 에러인 것 같아, 근본적인 원인을 찾기 위해 bcrypt 함수를 지우고 dto에서 데이터 유효성을 확인하는 class-validator 데코레이터도 모두 지웠더니 이번에는 다른 에러가 발생했다.
Field 'username' doesn't have a default value
역시나 MySQL에서 데이터를 제대로 인식하지 못하고 있는 것으로 보였다.
코드 쪽에서는 아무리 봐도 이상한 점을 찾지 못했다. 결국 api 테스트 프로그램에 문제가 있나 싶어서 다른 프로그램(thunder client)으로 해봤더니 정상 작동하는 것이었다. (;;)
원인을 찾기 위해 다시 원래 쓰고 있던 insomnia로 돌아와 살펴봤다.
데이터 형식은 JSON으로 잘 보내주고 있었다.
그런데 Headers쪽이 뭔가 쎄하다...
(!!)
Headers의 Content-Type이 비어 있었다. ㅠㅠ
Content-Type을 application/json으로 바꿔줬더니 정상 작동한다.
JSON 형태로 request를 보내는 경우 Headers의 Content-Type을 applicaiton/json으로 설정해줘야 한다.
(전달할 데이터 형식을 지정하면 insomnia에서 자동으로 Headers를 해당 타입으로 변경시켜주는데 아무래도 잘못 눌러서 삭제가 된 듯)
어쩐지 다른 API들은 데이터를 정상적으로 저장하고 있었는데 회원가입 API만 문제가 발생하는 게 이상했다. insomnia 쓰시는 분들 손가락 이슈 조심하시길 ^_ㅠ