Scalars
GraphQL에는 Int
, Float
, String
, Boolean
및 ID
와 같은 기본 유형이 포함됩니다. 그러나 때때로 사용자 정의 원자 데이터 유형 (예: 날짜
)을 지원해야 할 수도 있습니다.
Schema first
사용자 지정 스칼라를 정의하려면 (스칼라에 대한 자세한 내용은 여기 ) 다음과 같이 형식 정의와 전용 리졸버를 만들어야합니다. 여기서는 공식 문서에서와 같이 데모 목적으로 graphql-type-json
패키지를 가져옵니다. 이 npm 패키지는 JSON
GraphQL 스칼라 유형을 정의합니다. 먼저 패키지를 설치합니다:
Copy $ npm i --save graphql-type-json
패키지가 설치되면 커스텀 리졸버를 forRoot()
메소드에 전달해야 합니다 :
Copy import * as GraphQLJSON from 'graphql-type-json' ;
@ Module ({
imports : [
GraphQLModule .forRoot ({
typePaths : [ './**/*.graphql' ] ,
resolvers : { JSON : GraphQLJSON } ,
}) ,
] ,
})
export class ApplicationModule {}
이제 타입 정의에 JSON
스칼라를 사용할 수 있습니다 :
Copy scalar JSON
type Foo {
field : JSON
}
스칼라 형식을 정의하는 또 다른 형태는 간단한 클래스를 만드는 것입니다. Date
유형으로 스키마를 향상시키고 싶다고 가정 해 봅시다.
Copy import { Scalar , CustomScalar } from '@nestjs/graphql' ;
import { Kind , ValueNode } from 'graphql' ;
@ Scalar ( 'Date' )
export class DateScalar implements CustomScalar < number , Date > {
description = 'Date custom scalar type' ;
parseValue (value : number ) : Date {
return new Date (value); // value from the client
}
serialize (value : Date ) : number {
return value .getTime (); // value sent to the client
}
parseLiteral (ast : ValueNode ) : Date {
if ( ast .kind === Kind . INT ) {
return new Date ( ast .value);
}
return null ;
}
}
이후, 공급자로 DateScalar
를 등록해야합니다.
Copy @ Module ({
providers : [DateScalar] ,
})
export class CommonModule {}
이제 타입 정의에 Date
스칼라를 사용할 수 있습니다.
Code first
날짜 스칼라를 만들려면 간단히 새 클래스를 만드십시오.
Copy import { Scalar , CustomScalar } from '@nestjs/graphql' ;
import { Kind , ValueNode } from 'graphql' ;
@ Scalar ( 'Date' , type => Date)
export class DateScalar implements CustomScalar < number , Date > {
description = 'Date custom scalar type' ;
parseValue (value : number ) : Date {
return new Date (value); // value from the client
}
serialize (value : Date ) : number {
return value .getTime (); // value sent to the client
}
parseLiteral (ast : ValueNode ) : Date {
if ( ast .kind === Kind . INT ) {
return new Date ( ast .value);
}
return null ;
}
}
준비가되면 DateScalar
를 공급자로 등록하십시오.
Copy @ Module ({
providers : [DateScalar] ,
})
export class CommonModule {}
이제 클래스에서 날짜 유형을 사용할 수 있습니다.
Copy @ Field ()
creationDate : Date;