我无法让GraphQL识别JSON标量类型。
我按照[apollo docs](http://dev.apollodata.com/tools/graphql-tools/scalars.html#Using-a-package)为我的架构定义了JSON GraphQL标量类型:
架构:
const SchemaDefinition = `
scalar JSON
schema {
query: Query
mutation: Mutation
}
`
export default [
SchemaDefinition,
Query,
Mutation,
...
]
测试类型:
const Test = `
type Test {
bodyJson: JSON
}`
解析器:
import GraphQLJSON from 'graphql-type-json'
const QueryResolver = {
Query: {
viewer(root, args, ctx) {
return User.query()
.where('id', ctx.state.user)
.first()
}
}
}
const scalarJSON = {
JSON: GraphQLJSON
}
export default {
...QueryResolver,
...ViewerResolver,
...scalarJSON
...
}
我正在使用PostgreSQL,我正在查询的列(body_json)是数据类型jsonb。
如果我通过GraphiQL测试我的模式,当我直接从db返回值时(我使用Knex进行查询),我从GraphQL中收到此错误消息:
期望值类型为“JSON”但收到:[object Object]
如果我首先在返回的值上使用JSON.stringify,我会收到此错误:
“预期类型为”JSON“的值,但收到:{\”key \“:\”test \“}”
有关我可能做错的任何建议吗?
答案 0 :(得分:2)
我在解析器
中解决了这样的自定义标量JSON JSON: {
__serialize(value) {
return GraphQLJSON.parseValue(value);
} }
它对我来说很好。我认为它会对你有所帮助
答案 1 :(得分:0)
我无法使用基于文本的模式使用自定义标量(使用核心“graphql”库中的buildSchema('...')
),但是当我从头开始以编程方式构建模式时使用{{1 }})。