如何在 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 包

如何在 Java 中使用 GraphQL?

如何在 GraphQL 查询变量中使用数组

如何在 .graphql 文件中编写 GraphQl Upsert Query

如何在 graphql 中使用本地护照

如何使用 openapi-to-graphql 在环回 4 中启用 graphql 订阅