GraphQL错误 - 错误:只能创建GraphQLType的List但得到:[object Object]

时间:2016-08-22 11:16:59

标签: graphql relay

我收到以下错误:

  

错误:只能创建GraphQLType的List但得到:[object Object]。

但我传递的是GraphQLType。

这是触发错误的文件。

```
var GraphQL = require('graphql');
var BotType = require('../types/bot-type');
var Datastore = require('../../datastores/memory-datastore')

const BotListType = new GraphQL.GraphQLList(BotType);

module.exports = new GraphQL.GraphQLObjectType({
  type: BotListType,
  resolve: function(object) {
    return object.bots.map(Datastore.getBot)
  }
})
```

这是它抱怨的BotType

```
var GraphQL = require('graphql');
var RelayQL = require('graphql-relay');
var Node = require('../node');
var IntegrationListField = require('../fields/integration-list-field')

const BotType = new GraphQL.GraphQLObjectType({
  name: 'Bot',
  fields: {
    id: RelayQL.globalIdField('Bot'),
    name: { type: GraphQL.GraphQLString },
    integrations: IntegrationListField
  },
  interfaces: [ Node.nodeInterface ]
});

module.exports = BotType

```

2 个答案:

答案 0 :(得分:2)

我有这个错误,它实际上是由循环依赖引起的。本期https://github.com/graphql/graphql-js/issues/467

中略有记录

为了解决这个问题,我必须在我的字段定义中移动我的require语句来打破循环依赖。要清楚这两种类型仍然相互依赖,但是在发出请求之前不要加载依赖项,此时类型已经由graphql加载。

要演示的一些(伪)代码。

在:

const aType = require('../../a/types/a.type')
const bType = new graphql.GraphQLObjectType({
  name: 'Portfolio',
  fields: () => {
    return {
      listOfAs: {
        type: new graphql.GraphQLList(aType),
        resolve: (portfolio, args, context) => {
          return ...
        }
      }
    }
  }
})

后:

const bType = new graphql.GraphQLObjectType({
  name: 'Portfolio',
  fields: () => {
    const aType = require('../../a/types/a.type')
    return {
      listOfAs: {
        type: new graphql.GraphQLList(aType),
        resolve: (portfolio, args, context) => {
          return ...
        }
      }
    }
  }
})

答案 1 :(得分:1)

我试图在我的localhost上重现你的架构,并没有得到关于GraphQLList的错误。

但是,我收到错误(在第一个文件上)

  

错误:必须命名类型。

因为我注意到你在第一个文件中输入了错误的GraphQLObjectType定义。在我看来,你试图定义一个字段,而不是类型。

module.exports = new GraphQL.GraphQLObjectType({
  name: 'BotListType',
  fields: () => ({
    list: {
      type: new GraphQL.GraphQLList(BotType),
      resolve: function(object) {
        return object.bots.map(Datastore.getBot)
      }
    }
  })
});

我使用的是GraphQL版 0.6.2