Apollo Graphql 自定义标量 JSON - 抱怨“TypeError:type.getFields 不是函数”

Posted

技术标签:

【中文标题】Apollo Graphql 自定义标量 JSON - 抱怨“TypeError:type.getFields 不是函数”【英文标题】:Apollo Graphql Custom Scalar JSON - complains "TypeError: type.getFields is not a function" 【发布时间】:2017-06-13 15:31:48 【问题描述】:

我正在开发一个 apollo-express graphql 服务器。我试图集成模块'graphql-type-json'但是当我关注this description如何集成时,我尝试了很多东西,但似乎类型没有正确传递给解析器 - 但我'我在调试过程中遇到了困难,需要一点帮助。这是我正在做的事情的摘要。

import  makeExecutableSchema  from 'graphql-tools';
const GraphQLJSON = require('graphql-type-json');
//Have also tried import GraphQLJSON from 'graphql-type-json';

const schema = `
scalar JSON

type Device 
  deviceconfig: JSON


type Query 
  foo: Foo

`;

const resolveFunctions = 
   JSON: GraphQLJSON,
   //JSON: return GraphQLJSON stops error but other issues come up...
   Query: ...
 ;

const jsSchema = makeExecutableSchema(
typeDefs: schema,
resolvers: resolveFunctions,
resolverValidationOptions: 
  requireResolversForNonScalar: false,
,
allowUndefinedInResolve: true,
printErrors: true,
);

不确定是否相关,但我的 npm 存在一些问题:

graphql-type-json@0.1.4

UNMET PEER DEPENDENCY graphql@0.8.2 invalid

├─┬ graphql-tools@0.4.2

│ ├── UNMET PEER DEPENDENCY graphql@^0.5.0 || ^0.6.0


npm ERR! peer dep missing: graphql@^0.6.1 || ^0.7.0, required by apollo-server@0.3.3

npm ERR! peer dep missing: graphql@^0.5.0, required by graphql-tools@0.4.2

npm ERR! extraneous: casual@1.5.8 /home/apollo/node_modules/casual

npm ERR! extraneous: mongoose@4.6.6 /home/apollo/node_modules/mongoose

npm ERR! extraneous: mysql-events@0.0.8 /home/apollo/node_modules/mysql-events

npm ERR! peer dep missing: graphql@^0.5.0 || ^0.6.0, required by express-widgetizer@0.5.11

【问题讨论】:

"(node:5338) UnhandledPromiseRejectionWarning: UnhandledPromiseRejectionWarning: Unhandled Promise Rejection (rejection id: 1): TypeError: type.getFields is not a function" 是我得到的确切警告 我建议升级到最新版本的graphql-toolsgraphql,并使用最新的graphql-server-express,这是apollo-server 的新名称。这可能是一些奇怪的依赖关系。 【参考方案1】:

我在解析器中解析了这样的自定义标量 JSON

 JSON: 

    __serialize(value) 
        return GraphQLJSON.parseValue(value);
     

它对我来说很好用。我想对你有帮助

【讨论】:

以上是关于Apollo Graphql 自定义标量 JSON - 抱怨“TypeError:type.getFields 不是函数”的主要内容,如果未能解决你的问题,请参考以下文章

在 apollo-server 中将网关上的联合类型转换为服务 GraphQL 中的标量类型

如何在 apollo 的 graphql-gql 中使用从 npm 包导入的自定义 graphQL 类型

如何在 Absinthe GraphQL 请求中接受 JSON

如何手动将 apollo 自定义标量映射到客户端类型

Graphql-java 中的自定义标量

具有自定义标量类型的 GraphQL.js 突变