如何在GraphQl中使用graphql-type-json包

Tel*_*tos 5 postgresql node.js graphql

我无法让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,
  ...
]
Run Code Online (Sandbox Code Playgroud)

测试类型:

const Test = `
  type Test {
    bodyJson: JSON
 }`
Run Code Online (Sandbox Code Playgroud)

解析器:

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
  ...
}
Run Code Online (Sandbox Code Playgroud)

我正在使用PostgreSQL,我要查询的列(body_json)是数据类型jsonb.

如果我通过GraphiQL测试我的模式,当我直接从db返回值(我使用Knex查询)时,我从GraphQL收到此错误消息:

期望值类型为"JSON"但收到:[object Object]

如果我首先在返回的值上使用JSON.stringify,我会收到此错误:

"期望值类型为"JSON",但收到:{\"key \":\"test \"}"

关于我可能做错什么的任何建议?

And*_*erg 0

我无法获得使用基于文本的模式的自定义标量(使用buildSchema('...')核心“graphql”库),但当我从头开始以编程方式构建模式时(使用new GraphQLSchema(...)),它可以工作。