【问题标题】:graphQL - type must be Output TypegraphQL - 类型必须是输出类型
【发布时间】:2016-01-17 13:31:18
【问题描述】:

我正在尝试使用 graffiti 与 express 和 mongoose 设置 graphQL 路由。

但是我收到以下错误:

Error: myColl.myField field type must be Output Type but got: undefined.
  at invariant (/Users/nha/.../node_modules/graphql/jsutils/invariant.js:20:11)
  at /Users/nha/.../node_modules/graphql/type/definition.js:299:39

在猫鼬模式中,类型为:type : Schema.Types.ObjectId。应该换成别的吗?

我应该注意到版本是:

"@risingstack/graffiti": "^1.0.2"
"@risingstack/graffiti-mongoose": "^3.1.1"
"mongoose": "~3.6.20"

【问题讨论】:

  • 抛出错误的代码是什么?

标签: node.js mongoose graphql graphql-js


【解决方案1】:

错误

Error: ... field type must be Output Type but got: undefined.

意思是,你的 GraphQLFieldConfig 有问题。

GraphQLFieldConfig 需要类型字段。如果此字段丢失或 type-ref 错误(未定义等),则会出现此错误。

class GraphQLObjectType {
  constructor(config: GraphQLObjectTypeConfig)
}

type GraphQLObjectTypeConfig = {
  name: string;
  interfaces?: GraphQLInterfacesThunk | Array<GraphQLInterfaceType>;
  fields: GraphQLFieldConfigMapThunk | GraphQLFieldConfigMap;
  isTypeOf?: (value: any, info?: GraphQLResolveInfo) => boolean;
  description?: ?string
}

type GraphQLInterfacesThunk = () => Array<GraphQLInterfaceType>;

type GraphQLFieldConfigMapThunk = () => GraphQLFieldConfigMap;

...

type GraphQLFieldConfig = {
  type: GraphQLOutputType;
  args?: GraphQLFieldConfigArgumentMap;
  resolve?: GraphQLFieldResolveFn;
  deprecationReason?: string;
  description?: ?string;
}

http://graphql.org/graphql-js/type/#graphqlobjecttyp

【讨论】:

    【解决方案2】:

    原来我没有导入我引用的另一个模型。我有以下代码:

    myField : {
       type : Schema.Types.ObjectId,
       ref : 'myRef'
    }
    

    而且我没有将 'myRef' 导入到要使用 graphQL 的猫鼬模型列表中。确实很简单;虽然错误消息可能会得到改进(这个输出类型是什么?什么是未定义的?)。

    【讨论】:

      猜你喜欢
      • 2019-03-15
      • 2018-06-30
      • 2018-12-18
      • 2018-01-30
      • 2019-12-23
      • 2017-08-16
      • 2018-06-25
      • 2019-09-19
      相关资源
      最近更新 更多