레거시는 GraphQL, 추가 개발은 Rest 방식으로 진행되는 NestJs 기반의 백엔드에서 @Public이 아닌 Rest API에서 TypeError: Cannot read property 'headers' of undefined 가 발생하였다.
원인
처음 생각한 원인은 front에서 Rest API를 호출할 때, header에 토큰 정보가 포함되지 않는 것이라고 생각했는데
체크해보니 잘 들어가 있었다.
백엔드에서 JWT를 검증하는 AuthModule에서 백엔드로 들어오는 request를 체크하는 jwt-auth guard에 문제가 있었다. getRequest()메소드가 기존 @nestjs/passport에 포함되어있는 AuthGuard의 getRequest()를 오버라이드해서 GraphQL의 request만 pass 할 수 있게 되어있었다.
GraphQL과 Rest API 동시 사용시 Cannot read property 'headers' of undefined 에러 해결
레거시는 GraphQL, 추가 개발은 Rest 방식으로 진행되는 NestJs 기반의 백엔드에서 @Public이 아닌 Rest API에서 TypeError: Cannot read property 'headers' of undefined 가 발생하였다.
원인
처음 생각한 원인은 front에서 Rest API를 호출할 때, header에 토큰 정보가 포함되지 않는 것이라고 생각했는데
체크해보니 잘 들어가 있었다.
백엔드에서 JWT를 검증하는 AuthModule에서 백엔드로 들어오는 request를 체크하는 jwt-auth guard에 문제가 있었다. getRequest()메소드가 기존 @nestjs/passport에 포함되어있는 AuthGuard의 getRequest()를 오버라이드해서 GraphQL의 request만 pass 할 수 있게 되어있었다.
해결 방법
getRequest 메소드 내에서 request context의 타입이 GraphQL인지 HTTP인지 체크하여 해당 방식대로 request를 처리하도록 변경하였다.
한 서버 안에 GraphQL과 Rest API를 같이 쓰는 경우가 생각보다 적어 관련 이슈를 찾기도 힘들었고, 해결하는데 생각보다 시간이 들었지만, 특이한 케이스다 보니 좋은 경험이었다.
'개발 > NestJS' 카테고리의 다른 글