node_modules를 실시간으로 디버깅하기 위해 결국 Docker 이미지에다가 vim을 설치하는 결정을 하고 마는데.....
내가 어쩌다가 이런 짓을 하게 되었나 타임라인을 정리하자면...
문제 파악
- 내가 만들고 있는 NestJS 앱에
fedify/nestjs
설치하고, FedifyModule 세팅해놓은 이후에 POST 요청 자체가 안 가고 있었음 - 왜 에러가 발생하나하고 들여다봤더니
TypeError: Response body object should not be disturbed or locked
이런 에러가 떴음. - 오류가 발생한 위치는
fedify/express
에서 코드 복붙할때 들어갔던fromERequest
함수 호출 부분 이었음. - 혹시나 하고, 비슷한 이슈가 있나하고 찾아봤는데 Fedify 279번 이슈에도 딱 내가 밟고 있는거랑 똑같은 에러메시지를 내뱉고 있었음.
- 이런 에러가 왜 발생했는지, 여기저기 찾아봤는데 hono에서도 비슷한 오류가 있었고 그걸 해결한 사례를 발견. 요약하자면, request의 body를 두번 읽으려고 해서 생긴 문제. req에 rawBody가 들어있으면 rawBody를 ReadableStream에 넣는 것으로 분기처리하고, 아니라면 기존의 코드(
Readable.toWeb(req)
) 그대로 사용하는 것.
해결 시도
- 도커 이미지 내부에는 에디터가 설치가 되어 있지 않음. 그래서, Dockerfile.dev 파일에 vim 의존성을 먼저 깔아둠
- vim 설치 후에는 docker compose exec app /bin/bash 커맨드로 도커 컨테이너 안쪽으로 들어가서, hono에서 하던 방식대로 시도하려고 했으나.... console.log 로 까보니 rawBody는 없고, 이미 파싱이 되어 있는 body만 남아있었음. -> 여기서 알게 된 점은.... "다른 미들웨어에 통과시키기도 전에 request에 있는 rawBody는 이미 읽혀져있구나..."
- NestJS의 소스코드를 까보긴 해야겠지만, 다시 돌아와서 여기서
Readable.toWeb(req)
를req.body
로 바꾸니까 기적같이 그냥 돌아감...
NestJS 분석글... 쓰긴 해야겠지...? 근데, PR에도 올리긴 해야겠는데 어떡하지.... "이렇게 고치니까 되더라!!"는 좀 아닌 것 같다.
❤️
2 people reacted.
개발곰의 해커스펍 계정 - 개발 외적인 내용은 yuri.garden에서 찾아주세요.
프론트엔드를 기반으로 JS/TS 전반에 관심이 많습니다. 요즘에는 홈서버 구축을 어떻게 할지 관심을 두고 있습니다.
Hi, I'm who's behind Fedify, Hollo, BotKit, and this website, Hackers' Pub! My main account is at @hongminhee洪 民憙 (Hong Minhee).
Fedify, Hollo, BotKit, 그리고 보고 계신 이 사이트 Hackers' Pub을 만들고 있습니다. 제 메인 계정은: @hongminhee洪 民憙 (Hong Minhee).
Fedify、Hollo、BotKit、そしてこのサイト、Hackers' Pubを作っています。私のメインアカウントは「@hongminhee洪 民憙 (Hong Minhee)」に。
😂
1 person reacted.
Hi, I'm who's behind Fedify, Hollo, BotKit, and this website, Hackers' Pub! My main account is at @hongminhee洪 民憙 (Hong Minhee).
Fedify, Hollo, BotKit, 그리고 보고 계신 이 사이트 Hackers' Pub을 만들고 있습니다. 제 메인 계정은: @hongminhee洪 民憙 (Hong Minhee).
Fedify、Hollo、BotKit、そしてこのサイト、Hackers' Pubを作っています。私のメインアカウントは「@hongminhee洪 民憙 (Hong Minhee)」に。
😲
1 person reacted.
Hi, I'm who's behind Fedify, Hollo, BotKit, and this website, Hackers' Pub! My main account is at @hongminhee洪 民憙 (Hong Minhee).
Fedify, Hollo, BotKit, 그리고 보고 계신 이 사이트 Hackers' Pub을 만들고 있습니다. 제 메인 계정은: @hongminhee洪 民憙 (Hong Minhee).
Fedify、Hollo、BotKit、そしてこのサイト、Hackers' Pubを作っています。私のメインアカウントは「@hongminhee洪 民憙 (Hong Minhee)」に。