如何在 GraphQl 中使用 graphql-type-json 包
Posted
技术标签:
【中文标题】如何在 GraphQl 中使用 graphql-type-json 包【英文标题】:How to use graphql-type-json package with GraphQl 【发布时间】:2017-07-10 05:45:29 【问题描述】:我无法让 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 测试我的架构,当我直接从数据库返回值时(我使用 Knex 进行查询),我会从 GraphQL 收到以下错误消息:
预期类型为 \"JSON\" 但收到的值是:[object Object]
如果我首先对返回的值使用 JSON.stringify,我会收到此错误:
“应为 \"JSON\" 类型的值,但收到:\"key\":\"test\""
关于我可能做错的任何建议?
【问题讨论】:
【参考方案1】:我在解析器中解析了这样的自定义标量 JSON
JSON:
__serialize(value)
return GraphQLJSON.parseValue(value);
它对我来说很好用。我想对你有帮助
【讨论】:
【参考方案2】:我无法使用基于文本的架构(使用核心“graphql”库中的buildSchema('...')
)获得自定义标量,但当我从头开始以编程方式构建架构时(使用new GraphQLSchema(...)
),它可以工作。
【讨论】:
好的,我会调查的。谢谢你。如果有什么我会在这里更新。以上是关于如何在 GraphQl 中使用 graphql-type-json 包的主要内容,如果未能解决你的问题,请参考以下文章
如何在 GraphQl 中使用 graphql-type-json 包