gpt4 book ai didi

GraphQL:错误:架构查询必须是对象类型但得到:[对象对象]

转载 作者:行者123 更新时间:2023-12-01 13:30:25 25 4
gpt4 key购买 nike

我目前正在尝试继承 rootQuery 的模式以获得更多模块化。当前的设置如下所示:

发票架构.js

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)'
},
})
});

根查询.js

import {
GraphQLObjectType,
GraphQLString,
GraphQLInt,
GraphQLList,
GraphQLID
} from 'graphql';
import Invoice from './invoiceSchema';

export default {
Invoice: {
type: Invoice,
resolve(parentValue, args){
return 'Hello world';
}
}
};

架构.js

import query from './rootQuery';
import {GraphQLSchema} from 'graphql';

export default new GraphQLSchema({query});

当尝试执行以下错误并希望获得一些帮助和见解时,因为我在 invoiceSchema.js 中导出的内容显然是 ObjectType 而不是对象对象。

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...

其实是从here得到的思路我想知道为什么它不起作用...

最佳答案

您的根查询需要是 GraphQLObjectType 的一个实例,但是,rootQuery.js 正在导出一个普通对象。您需要将导出更改为如下内容:

export default new GraphQLObjectType({
name: 'RootQuery',
fields: () => ({
invoice: {
type: Invoice,
resolve(parentValue, args){
return 'Hello world';
}
}
})
};

注意:通常的做法是将所有字段名称(包括查询和突变名称)保留在驼峰命名中,并将 PascalCase 用于类型名称,以帮助区分两者。

此外,如果您正在模块化架构,您可能会发现使用 graphql-tools 会很有帮助。用于生成您的架构。 IMO,它使您的模式更具可读性,并有助于避免在模块化模式时可能遇到的一些更常见的陷阱。该文档有一个很好的示例,说明如何使用 makeExecutableSchema 模块化您的架构 here .

关于GraphQL:错误:架构查询必须是对象类型但得到:[对象对象],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46213464/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com