Express-GraphQL을 사용하여 GraphQL 스칼라 유형 생성

https://www.amazon.com/John-Au-Yeung/e/B08FT5NT62에서 Amazon에서 내 책을 확인하십시오.

지금 http://jauyeung.net/subscribe/에서 내 이메일 목록을 구독하십시오.

GraphQL을 사용하면 객체 유형 및 기타 복합 데이터 유형 생성과 마찬가지로 스칼라 유형을 생성할 수 있습니다.

이 기사에서는 Express-GraphQL을 사용하여 스칼라 유형을 생성하는 방법을 살펴보겠습니다.

GraphQLScalarType


GraphQLScalarType 생성자를 사용하여 GraphQL 스칼라 유형을 만들 수 있습니다. 스칼라 유형을 생성하려면 이름, 선택적 설명, 값을 직렬화하고 구문 분석하는 방법을 제공해야 합니다.

생성자는 다음 필드가 있는 개체를 사용합니다.
  • name — 문자열로 정의하려는 스칼라 유형의 이름
  • description — 유형에 대한 설명이 포함된 선택적 문자열
  • serializevalue 매개변수를 취하는 함수. 이 매개변수는 무엇이든 될 수 있으며 전송을 위해 변환하려는 것을 반환합니다.
  • parseValuevalue 매개변수를 취하는 선택적 함수. 이 매개변수는 무엇이든 될 수 있으며 원하는 대로 구문 분석된 값을 반환합니다.
  • 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;  
      }  
    }
    


    함수에서 valueDate 생성자에서 생성되었는지 확인하고, 생성된 경우 타임스탬프로 변환된 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 생성자를 사용하여 스칼라 유형을 만들 수 있습니다.

    하나를 정의하려면 원하는 대로 값을 직렬화하고 구문 분석하는 함수를 전달해야 합니다.

    좋은 웹페이지 즐겨찾기