美文网首页
GraphQL 渐进学习 03-GraphQL-scalar-自

GraphQL 渐进学习 03-GraphQL-scalar-自

作者: 会煮咖啡的猫咪 | 来源:发表于2018-05-13 11:24 被阅读151次

    GraphQL 渐进学习 03-GraphQL-scalar-自定义类型

    目标

    • 编写自定义类型

    代码

    步骤

    1. 引用 graphql graphql/language

    const {GraphQLScalarType} = require('graphql')
    const {Kind} = require('graphql/language')
    
    • GraphQLScalarType 用来声明 Scalar

    • Kind 类型检查

    2. 编写 typeDefs

    const typeDefs = `
      ###
      自定义日期类型
      ###
      scalar Date
    
      type Notice {
        content: String!
        ###
        消息时间
        ###
        noticeTime: Date!
      }
    `
    
    • ###...### 是注释

    • scalar Date 定义了自定义类型

    • Notice.noticeTime 字段使用自定义 Date 类型

    3. 编写 resolvers

    const resolvers = {
      Date: new GraphQLScalarType({
        name: 'Date',
        description: 'Date custom scalar type',
        parseValue(value) {
          return new Date(value) // value from the client
        },
        serialize(value) {
          // return new Date(value).getTime()
          return new Date(value) // value sent to the client
        },
        parseLiteral(ast) {
          if (ast.kind === Kind.INT) {
            return parseInt(ast.value, 10) // ast value is always in string format
          }
          return null
        }
      })
    }
    
    • resolvers 中需要详细声明

    • parseValue(value) {... 客户端输入

    • serialize(value) {... 打印给客户端

    • parseLiteral(value) {... 检查类型

    4. 合并 Schema

    const schema = makeExecutableSchema({
      typeDefs,
      resolvers
    })
    

    参考

    相关文章

      网友评论

          本文标题:GraphQL 渐进学习 03-GraphQL-scalar-自

          本文链接:https://www.haomeiwen.com/subject/jjtldftx.html