Express-GraphQL을 사용하여 GraphQL 스칼라 유형 생성
4258 단어 javascriptwebdevgraphqlnode
지금 http://jauyeung.net/subscribe/에서 내 이메일 목록을 구독하십시오.
GraphQL을 사용하면 객체 유형 및 기타 복합 데이터 유형 생성과 마찬가지로 스칼라 유형을 생성할 수 있습니다.
이 기사에서는 Express-GraphQL을 사용하여 스칼라 유형을 생성하는 방법을 살펴보겠습니다.
GraphQLScalarType
GraphQLScalarType
생성자를 사용하여 GraphQL 스칼라 유형을 만들 수 있습니다. 스칼라 유형을 생성하려면 이름, 선택적 설명, 값을 직렬화하고 구문 분석하는 방법을 제공해야 합니다.
생성자는 다음 필드가 있는 개체를 사용합니다.
name
— 문자열로 정의하려는 스칼라 유형의 이름description
— 유형에 대한 설명이 포함된 선택적 문자열serialize
— value
매개변수를 취하는 함수. 이 매개변수는 무엇이든 될 수 있으며 전송을 위해 변환하려는 것을 반환합니다. parseValue
— value
매개변수를 취하는 선택적 함수. 이 매개변수는 무엇이든 될 수 있으며 원하는 대로 구문 분석된 값을 반환합니다. parseLiteral
— 리터럴의 값인 추상 구문 트리 객체를 취하는 함수는 값을 변환하려는 것을 반환합니다. 예시
예를 들어 다음을 작성하여 스칼라 유형을 만들고 응답으로 반환할 수 있습니다.
const express = require('express');
const graphqlHTTP = require('express-graphql');
const graphql = require('graphql');const dateValue = (value) => {
if (value instanceof Date) {
return +value;
}
}const DateType = new graphql.GraphQLScalarType({
name: 'Date',
serialize: dateValue,
parseValue: dateValue,
parseLiteral(ast) {
return dateValue(ast.value);
}
});const queryType = new graphql.GraphQLObjectType({
name: 'Query',
fields: {
currentDate: {
type: DateType,
resolve: () => {
return new Date();
}
}
}
});const schema = new graphql.GraphQLSchema({ query: queryType });const app = express();
app.use('/graphql', graphqlHTTP({
schema: schema,
graphiql: true,
}));app.listen(3000, () => console.log('server started'));
위의 코드에서 dateValue
함수를 다음과 같이 정의했습니다.
const dateValue = (value) => {
if (value instanceof Date) {
return +value;
}
}
함수에서 value
가 Date
생성자에서 생성되었는지 확인하고, 생성된 경우 타임스탬프로 변환된 Date
객체를 반환합니다.
그런 다음 이를 사용하여 다음과 같이 Date
라는 새 스칼라 유형을 만듭니다.
const DateType = new graphql.GraphQLScalarType({
name: 'Date',
serialize: dateValue,
parseValue: dateValue,
parseLiteral(ast) {
return dateValue(ast.value);
}
});
우리는 'Date'
라는 이름을 전달했습니다. 그런 다음 타임스탬프를 스칼라 유형의 직렬화된 버전으로 반환하는 serialize
속성이 있는 dateValue
속성이 있습니다.
마찬가지로 Date
개체를 동일한 기능을 가진 UNIX 타임스탬프로 구문 분석합니다.
parseLiteral
함수에서 값을 dateValue
함수에 전달하여 Date
객체를 UNIX 타임스탬프로 변환합니다.
그런 다음 다음과 같이 사용자에게 타임스탬프 응답을 반환할 수 있도록 쿼리 유형을 만듭니다.
const queryType = new graphql.GraphQLObjectType({
name: 'Query',
fields: {
currentDate: {
type: DateType,
resolve: () => {
return new Date();
}
}
}
});
쿼리할 수 있도록 Query
객체 유형을 만든 다음 fields
속성에서 이전에 정의한 currentDate
스칼라 유형의 Date
필드를 반환합니다.
resolve
메서드에서 new Date()
를 반환하면 응답에서 UNIX 타임스탬프로 자동 구문 분석됩니다. 이것이 dateValue
함수에서 직렬화하기로 결정한 방식이기 때문입니다.
그런 다음 다음과 같이 쿼리를 수행합니다.
{
currentDate
}
우리는 다음과 같은 것을 얻습니다.
{
"data": {
"currentDate": 1579464244268
}
}
여기서 currentDate
는 현재 UNIX 타임스탬프로 대체됩니다.
결론
GraphQLScalarType
생성자를 사용하여 스칼라 유형을 만들 수 있습니다.
하나를 정의하려면 원하는 대로 값을 직렬화하고 구문 분석하는 함수를 전달해야 합니다.
Reference
이 문제에 관하여(Express-GraphQL을 사용하여 GraphQL 스칼라 유형 생성), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/aumayeung/creating-graphql-scalar-types-with-express-graphql-45d0
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
const express = require('express');
const graphqlHTTP = require('express-graphql');
const graphql = require('graphql');const dateValue = (value) => {
if (value instanceof Date) {
return +value;
}
}const DateType = new graphql.GraphQLScalarType({
name: 'Date',
serialize: dateValue,
parseValue: dateValue,
parseLiteral(ast) {
return dateValue(ast.value);
}
});const queryType = new graphql.GraphQLObjectType({
name: 'Query',
fields: {
currentDate: {
type: DateType,
resolve: () => {
return new Date();
}
}
}
});const schema = new graphql.GraphQLSchema({ query: queryType });const app = express();
app.use('/graphql', graphqlHTTP({
schema: schema,
graphiql: true,
}));app.listen(3000, () => console.log('server started'));
const dateValue = (value) => {
if (value instanceof Date) {
return +value;
}
}
const DateType = new graphql.GraphQLScalarType({
name: 'Date',
serialize: dateValue,
parseValue: dateValue,
parseLiteral(ast) {
return dateValue(ast.value);
}
});
const queryType = new graphql.GraphQLObjectType({
name: 'Query',
fields: {
currentDate: {
type: DateType,
resolve: () => {
return new Date();
}
}
}
});
{
currentDate
}
{
"data": {
"currentDate": 1579464244268
}
}
GraphQLScalarType
생성자를 사용하여 스칼라 유형을 만들 수 있습니다.하나를 정의하려면 원하는 대로 값을 직렬화하고 구문 분석하는 함수를 전달해야 합니다.
Reference
이 문제에 관하여(Express-GraphQL을 사용하여 GraphQL 스칼라 유형 생성), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/aumayeung/creating-graphql-scalar-types-with-express-graphql-45d0텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)