第一次做graphQL。我搜索了资源但找不到有用的资源。 我编写了以下架构,从另一个stackoverflow帖子获得了一些帮助。
schema.js
function getDataFromUrl(){
return [
{
"EventCode": "ET00029280",
"EventType": "CT",
"EventTitle": "OYSTERS Beach Park",
"VenueName": "Newexcelsior",
"VenueRegion": "Mumbai"
},
{
"EventCode": "ET00030629",
"EventType": "CT",
"EventTitle": "Stand-Up Comedy: The Trial Room",
"VenueName": "Newexcelsior",
"VenueRegion": "Mumbai"
}
];
}
const eventType = new GraphQLObjectType({
name: 'Event',
fields: {
EventTitle: {
type: GraphQLString,
description: 'Event Title'
},
},
});
const eventListType = new GraphQLObjectType({
name: 'EventList',
fields: {
events: {
type: new GraphQLList(eventType),
description: 'List of items',
},
},
});
const schema = new GraphQLSchema({
query: new GraphQLObjectType({
name: 'Query',
fields: {
eventList: {
type: new GraphQLList(eventListType),
resolve: () => getDataFromUrl(),
}
}
})
});
module.exports = schema;
当我查询
时{
eventList {
events {
EventTitle
}
}
}
我收到了这个回复:
{
"data": {
"eventList": [
{
"events": null
},
{
"events": null
}
]
}
}
我期待我的架构有一些变化,但是我想要的回应是
{
"data": [
{
"EventTitle": "OYSTERS Beach Park"
},
{
"EventTitle": "Stand-Up Comedy: The Trial Room"
}
]
}
还请提供一些我学习基础知识的链接。
答案 0 :(得分:1)
现在看起来最让你吵架的是你如何定义一个列表。没有必要定义一个名为EventList的单独类型 - 当您指定GraphQLList(someOtherType)
时,您已经告诉GraphQL期望该特定类型的数组。您当前的Schema期望一个类型数组的数组。由于您传入的数据结构与您的架构不匹配,因此GraphQL无法找到一个名为EventTitle的字段来匹配,因此它返回null。
此案例中的解决方法是完全删除eventListType
并将type
字段的eventList
改为eventType
。
The docs可能是学习基础知识的最佳选择。唯一的问题是它们包含的例子太基本了。这是GitHub上的list of projects,您可以签出以查看GraphQL的运行情况。
如果你刚开始,我也 高度 推荐使用Apollo的graphql-tools。即使您不在客户端使用Apollo,graphql-tools也可以轻松地设置服务器。您的模式将更具可读性,因为您将其写为字符串而不是像在vanilla GraphQL.js中那样的对象。除了GraphQL之外,您还可以轻松设置GraphiQL endpoint,这使调试变得更加容易:)