我收到以下错误:
错误:只能创建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
```
答案 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