250x250
Notice
Recent Posts
Recent Comments
관리 메뉴

탁월함은 어떻게 나오는가?

[Nest.js] 스웨거 사용시 순환 참조 에러(enum 사용할 경우) 본문

[Snow-ball]server/NestJS

[Nest.js] 스웨거 사용시 순환 참조 에러(enum 사용할 경우)

Snow-ball 2023. 3. 27. 18:30
반응형

nestjs에서 스웨거 사용시 아래와 같은 순환 참조 에러가 발생했다.

nestjs의 공식 홈페이지에서는 밑에 에러와 동일하게 type: () => ClassType 을 하라고 한다.

하지만, 나같은 경우에는 그게 해결이 되지 않아 다른 방법을 찾았다.

 

 

에러

Error: A circular dependency has been detected (property key: "SOCCER"). Please, make sure that each side of a bidirectional relationships are using lazy resolvers ("type: () => ClassType").

 

 

 

 


 

 

 

변경 전 코드

코드는 회사내의 코드를 사용하기 어려워 유사하게 만든 코드이다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
enum CategoryType {
  SOCCER = 'SOCCER',
  BASEBALL = 'BASEBALL',
}
 
export class Model {
  @IsString()
  @IsNotEmpty()
  @ApiProperty({
    type: String,
    required: false,
    default'',
    maxLength: 10,
    description: '제목은 최대 10자입니다.',
  })
  public title!: string;
 
  @ApiProperty({
    type: String,
    required: false,
    default'',
  })
  public contents!: string;
 
  @IsEnum(CategoryType)
  @ApiProperty({
    type: CategoryType,
    required: true,
  })
  public category!: CategoryType;
}
cs

 

 

 

변경 후 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
enum CategoryType {
  SOCCER = 'SOCCER',
  BASEBALL = 'BASEBALL',
}
 
export class Model {
  @IsString()
  @IsNotEmpty()
  @ApiProperty({
    type: String,
    required: false,
    default'',
    maxLength: 10,
    description: '제목은 최대 10자입니다.',
  })
  public title!: string;
 
  @ApiProperty({
    type: String,
    required: false,
    default'',
  })
  public contents!: string;
 
  @IsEnum(CategoryType)
  @ApiProperty({
    enum: [
      'SOCCER',
      'BASEBALL'
    ],
  })
  public category!: CategoryType;
}
cs

 

 

 

해결에 대한 설명

nestjs에서 설명하는 순환참조는 클래스간의 문제이기 때문에 적용이 되지않았다.

다만, enum방식을 그대로 적용했더니 동작이 가능해졌다.

 

 

 

 

반응형
Comments