GraphQL 渐进学习 03-GraphQL-scalar-自
2018-05-13 本文已影响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
})