gaurd 에서 reflector가 undefined나옵니다...
171
작성한 질문수 1
안녕하세요.
강의대로 Guard에 대해 같이 진행하였지만, App.module.ts에
{
provide: APP_GUARD,
useClass: AccessTokenGuard,
},를 넣으면,
bearertokengaurd에서 isPublic이 항상 undefined로 나와서 exception이 나옵니다...dependency 오류는 안나오는걸로 보아 다른 문제인 것 같은데 도저히 못 찾겠습니다..
@Injectable()
export class BearerTokenGuard implements CanActivate {
constructor(
private readonly reflector: Reflector,
private readonly authService: AuthService,
private readonly memberService: MemberService,
) {}여기 디버깅 했을 때 reflector, authService, memberService 모두가 undefined으로 나옵니다.
정확히
this.reflector.getAllAndOverride가 터지고 있습니다...
뭐가 문제 일까요?
답변 2
0
안녕하세요, 인프런 AI 인턴입니다.
kwa9010님, 문제 상황에 대해 잘 설명해주셨네요.
BearerTokenGuard에서 reflector, authService, memberService가 undefined로 나오는 문제는 대개의 경우 NestJS의 Dependency Injection (DI) 시스템에서 의존성을 올바르게 주입하지 못하는 경우에 발생합니다. 이러한 문제는 다음과 같은 이유로 발생할 수 있습니다:
Module 설정 오류:
App.module.ts또는 관련 모듈에서Reflector,AuthService,MemberService를 올바르게 등록하지 않았을 경우 발생할 수 있습니다. 각각의 서비스와Guard가 속한 모듈을 확인해보고 필요한 경우 모듈에 서비스를 제공해야 합니다.순환 참조:
AuthService,MemberService또는 이들이 의존하고 있는 다른 서비스 간에 순환 참조가 있는 경우에도 이와 같은 문제가 발생할 수 있습니다. 이 경우, 의존성 주입 시점에 서비스가 아직 완전히 초기화되지 않아 undefined로 나올 수 있습니다.Custom Provider 문제:
APP_GUARD와 같이 NestJS에서 제공하는 Global Scope Provider를 사용할 때, 의존성 주입 순서에 문제가 있을 수 있습니다. 특히,Reflector가 NestJS 프레임워크에 의해 자동으로 주입되는 것이 아니라, 직접 제공해야 하는 경우가 있습니다. 이때는Reflector를 명시적으로 모듈에 제공해야 할 수 있습니다.Decorator의 오용:
@Injectable()데코레이터가 적절히 사용되었는지도 확인해주세요. 경우에 따라 클래스나 의존성에@Injectable()이 누락되어 의존성 주입이 수행되지 않을 수 있습니다.
해결 방법은 다음과 같이 시도해볼 수 있습니다:
- 모듈 설정을 다시 한번 꼼꼼히 확인하세요. 특히
AppModule뿐만 아니라AuthService,MemberService가 선언되어 있는 모듈의 설정도 확인해보세요.
- 순환 참조가 의심되는 경우, 하나의 서비스를
forwardRef(() => AnotherService)를 사용하여 순환 참조 문제를 해결해보세요.
Reflector가 필요한 경우,CoreModule이나 Guard를 사용하는 모듈에서Reflector를 명시적으로 제공하는 것을 고려하세요.
이러한 해결 방안을 적용해도 문제가 해결되지 않는다면, 모듈 및 서비스 구성을 더 상세히 점검해보는 것이 필요할 수 있습니다.
cascade 질문
0
39
1
@types/bcrypt 설치과정이 누락된것같습니다.
0
47
1
process.env port key 에러
0
46
1
추상화
0
49
1
[공유] DTO optional 필드가 undefined로 잡혀 TypeORM 조건이 깨지는 현상
0
94
2
where 키워드가 들어가는 메서드와 아닌 메서드
0
56
1
BearerTokenGuard에서 db를 조회해서 유저 정보를 불러오는 이유?
0
69
1
app.controller app.service 는 지워도되나요?
0
69
1
@JoinColumn을 쓰는 경우와 안쓰는 경우의 차이
0
78
1
포트 3000에서 listen하는 곳까지 넘어가지 않습니다.
0
66
1
PickType 사용 시 `as const`를 꼭 사용해야 하나요?
0
102
2
socket connect 오류
0
96
2
강의를 들으면서 궁금한 점
0
97
2
DELETE 요청의 반환값은 어떤 기준으로 결정하는 게 좋을까요?
0
60
2
커리큘럼 질문
0
98
2
put 요청은 언제
0
90
3
typeorm VS prisma
0
347
2
142 강의 > 4:00 > 포스트멘 활용 관련 질문 드립니다.
0
76
2
User 데코레이터 버그 수정 전달드립니다.
0
67
1
git 주소 부탁드립니다.
0
112
2
nest g resource 명령어 에러
0
99
2
로그인 엔드포인트 관련 질문
0
84
2
yarn으로 express 다운 후 node 2_server.js 실행 안되는 경우
0
146
3
"흔히 사용되는 메서드" 강의 관련 질문입니다~
0
95
2





