GraphQL:错误:架构查询必须是对象类型,但得到:[Object]
我目前正在尝试为rootQuery继承模式,以获得更多的模块化。当前的设置如下所示: invoiceSchema.jsGraphQL:错误:架构查询必须是对象类型,但得到:[Object],graphql,Graphql,我目前正在尝试为rootQuery继承模式,以获得更多的模块化。当前的设置如下所示: invoiceSchema.js import { GraphQLObjectType, GraphQLInt, } from 'graphql'; export default new GraphQLObjectType({ name: 'Invoice', description: 'A monthly billing invoice for an organization'
import {
GraphQLObjectType,
GraphQLInt,
} from 'graphql';
export default new GraphQLObjectType({
name: 'Invoice',
description: 'A monthly billing invoice for an organization',
fields: () => ({
amountDue: {
type: GraphQLInt,
description: 'The amount the card will be charged (total + startingBalance with a min value of 0)'
},
})
});
rootQuery.js
import {
GraphQLObjectType,
GraphQLString,
GraphQLInt,
GraphQLList,
GraphQLID
} from 'graphql';
import Invoice from './invoiceSchema';
export default {
Invoice: {
type: Invoice,
resolve(parentValue, args){
return 'Hello world';
}
}
};
schema.js
import query from './rootQuery';
import {GraphQLSchema} from 'graphql';
export default new GraphQLSchema({query});
在尝试执行以下错误时,希望得到一些帮助和见解,因为我在invoiceSchema.js中导出的显然是一个ObjectType,而不是一个object
C:\project\node_modules\graphql\jsutils\invariant.js:19
throw new Error(message);
^
Error: Schema query must be Object Type but got: [object Object].
at invariant (C:\project\node_modules\graphql\jsutils\invariant.js:19:11)
at new GraphQLSchema (C:\project\node_modules\graphql\type\schema.js:72:88)
at Object.<anonymous> (C:/project/api/schema/schema.js:6:16)
at Module._compile (module.js:573:30)
at loader (C:\project\node_modules\babel-register\lib\node.js:144:5)
at Object.require.extensions.(anonymous function) [as .js] (C:\project\node_modules\babel-register\lib\node.js:154:7)
at Module.load (module.js:507:32)
at tryModuleLoad (module.js:470:12)
at Function.Module._load (module.js:462:3)
at Module.require (module.js:517:17)
[nodemon] app crashed - waiting for file changes before starting...
C:\project\node\u modules\graphql\jsutils\invariant.js:19
抛出新错误(消息);
^
错误:架构查询必须是对象类型,但得到:[Object]。
at invariant(C:\project\node\u modules\graphql\jsutils\invariant.js:19:11)
在新的GraphQLSchema(C:\project\node\u modules\graphql\type\schema.js:72:88)
反对。我想知道为什么它不起作用…您的根查询需要是GraphQLObjectType
的一个实例,但是,rootQuery.js
正在导出一个普通对象。您需要将导出更改为以下内容:
export default new GraphQLObjectType({
name: 'RootQuery',
fields: () => ({
invoice: {
type: Invoice,
resolve(parentValue, args){
return 'Hello world';
}
}
})
};
注意:通常的做法是将所有字段名(包括查询名和突变名)保留在camelCase中,并使用PascalCase作为类型名,以帮助区分这两种名称
此外,如果您正在模块化您的模式,您可能会发现利用它来生成您的模式是很有帮助的。在我看来,它使您的模式更具可读性,并有助于避免在模块化模式时可能遇到的一些常见陷阱。文档中有一个很好的例子,说明了如何使用makeExecutableSchema
模块化您的模式,谢谢!现在按如下方式使用:导出默认的新GraphQLObjectType({name:'RootQuery',字段:()=>({……Invoice})};
这会导致错误错误:RootQuery.name字段配置必须是一个对象
-这很奇怪,因为它引用了查询名称的字符串。也许你也知道如何解决这个问题。那里的排列运算符不合适。你基本上是将字段设置为发票类型,这不起作用。字段
需要是一个对象或返回该对象的函数。在任何一种情况下,该对象都会将每个字段名映射到另一个包含该字段详细信息的对象(如类型
,参数
,解析
,等等)。{……发票