검색한 결과를 1차적으로 RDBMS(MySQL)에서 뽑은뒤,
잠시 Cache (Redis)에 저장해 속도를 높이려했다
근데 여기서 Redis에 Set된 데이터를 Front로 Return할때
Date.Serialize()... Error! 이렇게 뜨는게아닌가
해당부분을 해결하려고 계속 검색한결과
- Redis는 Date타입이 들어오면 String형태로 저장시킨다
- 그러면 TZ같은것도 통째로 Strinf형태로 저장이됨..
- 그 형태의 String을 Date타입으로 강제로 형변환을 하니 Return 시킬때 형이 안맞다고 에러를 내는거였음
이거때문에 몇시간정도 매달리다가 이것저것 찾아보니..
Scalars
라는걸 발견했다
GraphQL에는 Int, Float, String, Boolean 및 ID와 같은 기본 유형이 포함됩니다. 그러나 때때로 사용자 정의 원자 데이터 유형 (예: 날짜)을 지원해야 할 수도 있습니다.
Nest.js에서 Code First방식으로 Scalar를 지정하는법을 찾다가 레퍼런스 문서를 발견해서 내 방식대로 수정해봤다
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: any): Date {
return new Date(value); // value from the client
}
// 스트링형태로 들어온다면
// 스트링 형태로 들어온놈을 new Date()로 바꿔서 리턴시켜줫다
serialize(value: any): any {
if (typeof value == typeof 's') {
const result = new Date(value);
return result;
}
return value; // value sent to the client
}
parseLiteral(ast: ValueNode): Date {
if (ast.kind === Kind.INT) {
return new Date(ast.value);
}
if (ast.kind === Kind.STRING) {
return new Date(ast.value);
}
return null;
}
}
그후 AppModule
에 글로벌로 쓸수있게 등록했다
그후엔 에러 해결!