Javascript 在GraphQL中返回关系数据时出现问题
我正在创建Reddit克隆,我正在首先设置后端,但在创建关系数据时遇到了问题 使用此查询时:Javascript 在GraphQL中返回关系数据时出现问题,javascript,graphql,graphql-js,Javascript,Graphql,Graphql Js,我正在创建Reddit克隆,我正在首先设置后端,但在创建关系数据时遇到了问题 使用此查询时: query { subreddit(id: 1) { name posts { title } } } 我期望: { "data": { "subreddit": { "name": "javascript" "posts": [ { "title": "JS Post"
query {
subreddit(id: 1) {
name
posts {
title
}
}
}
我期望:
{
"data": {
"subreddit": {
"name": "javascript"
"posts": [
{
"title": "JS Post"
}
]
}
}
}
我得到的是:
{
"data": null,
"errors": [
{
"message": "Cannot return null for non-nullable field Subreddit.posts.",
"locations": [
{
"line": 4,
"column": 5
}
],
"path": [
"subreddit",
"posts"
]
}
]
}
以下是模式:
type Query {
subreddits: [Subreddit!]!
subreddit(id: ID!): Subreddit!
posts: [Post!]!
post(id: ID!): Post!
}
type Mutation {
createSubreddit(
name: String!
description: String!
contentType: String!
ageRestriction: Boolean!
): Subreddit!
}
type Subreddit {
id: ID!
name: String!
description: String!
contentType: String!
ageRestriction: Boolean!
posts: [Post!]!
}
type Post {
id: ID!
title: String!
body: String!
subredditId: ID!
# userId: ID!
}
以下是server/index.js:
我正在使用GraphQL桌面应用程序进行查询,但我没有GraphQL瑜伽配置文件
我哪里做错了?我希望有人给我指出正确的方向,这样我就能自己解决问题。这是我第一次单独使用GraphQL,在YouTube上做了一些教程之后,他们使用了GraphQL express,而我使用的是GraphQL瑜伽。将为查询帖子编写的解析器移动到Subreddit中,以解析那里的帖子字段。如果您的冲突解决程序不符合默认的冲突解决程序实现:
(parent) => parent[fieldName]
就像你的情况一样
(parent) => parent.posts
你必须自己指定它。如果查询中的字段POST应显示所有POST,则您可能希望使用以下实现:
const resolvers = {
Query: {
subreddits: () => dummySubreddits,
subreddit: (parent, args) => {
return dummySubreddits.find(obj => obj.id == args.id);
},
posts: () => dummyPosts,
post: (parent, args) => {
return dummyPosts.find(obj => obj.id == args.id);
}
},
Subreddit: {
posts: () => (parent, args) =>
dummyPosts.filter(obj => obj.subredditId == parent.id),
},
Mutation: {
createSubreddit: (parent, args) => {
let subreddit = {
id: idCountSubreddit++,
name: args.name,
description: args.description,
contentType: args.contentType,
ageRestriction: args.ageRestriction
};
return subreddit;
}
}
};
我必须为subreddit添加一个解析器来处理帖子
您已经显示了预期的结果,但没有显示您在进行查询时实际看到的结果或返回的错误。看看您是如何实际进行查询的也很好实际的查询是什么,您是否通过客户端GraphiQL或Postman之类的工具将其发送到服务器?此外,您还没有包括解析程序或graphql瑜伽configuration@DanielRearden哦,我忘了加那个了。我将编辑该问题以将其包括在内。我正在使用GraphQL桌面。我已经包括了解析器。它们在const resolvers={…}中,const resolvers={…}位于server/index.js中。我没有配置文件。我只是说你应该包括如何配置GraphQLServer实例:你是对的。这就是问题所在。一位朋友想出来了,不过还是要感谢你抽出时间来帮忙!
const resolvers = {
Query: {
subreddits: () => dummySubreddits,
subreddit: (parent, args) => {
return dummySubreddits.find(obj => obj.id == args.id);
},
posts: () => dummyPosts,
post: (parent, args) => {
return dummyPosts.find(obj => obj.id == args.id);
}
},
Subreddit: {
posts: () => (parent, args) =>
dummyPosts.filter(obj => obj.subredditId == parent.id),
},
Mutation: {
createSubreddit: (parent, args) => {
let subreddit = {
id: idCountSubreddit++,
name: args.name,
description: args.description,
contentType: args.contentType,
ageRestriction: args.ageRestriction
};
return subreddit;
}
}
};
const resolvers = {
Query: {
subreddits: () => dummySubreddits,
subreddit: (parent, args) => {
return dummySubreddits.find(obj => obj.id == args.id);
},
posts: (parent, args) => {
return dummyPosts;
},
post: (parent, args) => {
return dummyPosts.find(obj => obj.id == args.id);
}
},
Mutation: {
createSubreddit: (parent, args) => {
let subreddit = {
id: idCountSubreddit++,
name: args.name,
description: args.description,
contentType: args.contentType,
ageRestriction: args.ageRestriction
};
return subreddit;
}
},
// This resolver was needed
Subreddit: {
posts: subreddit =>
dummyPosts.filter(obj => obj.subredditId == subreddit.id)
}
};