Apollo GraphQL - 未触发解析器
Posted
技术标签:
【中文标题】Apollo GraphQL - 未触发解析器【英文标题】:Apollo GraphQL - resolver not being triggered 【发布时间】:2021-01-25 23:33:53 【问题描述】:我是 GraphQL 新手。我从 javascript Apollo 库开始,无法启动解析器。我很难说什么时候应该调用解析器,以及我应该放什么键。
这是我的架构和解析器:
// The GraphQL schema in string form
const typeDefs = `
type Query user(id: ID!): User, posts: Post
type User id: ID!, created: Int, username: String, bio: String, status: String, avatar: String, posts: [Post]
type Post id: ID!, created: Int, user_id: Int, text: String, object_set_id: Int, edited: Int, views: Int, upvotes: Int, downvotes: Int, Parent: Int
`;
// The resolvers
const resolvers =
Query:
user: (parent, args, context, info) =>
return users.find(user => user.id === Number(args.id));
,
// posts: () => posts,
,
Post:
id: (parent, args, context, info) =>
console.log(posts.filter(post => post.user_id === Number(parent.id)))
return posts.filter(post => post.user_id === Number(parent.id))
;
我想通过用户 ID 指定用户,然后向下过滤以获取该用户发布的所有帖子(最终使用时间过滤器)。
我尝试了几件事,但用户下的“帖子”总是出现“空”。我错过了什么?谢谢。
【问题讨论】:
...以及您正在关注的教程? apollographql.com/docs/apollo-server/getting-started 然后在这里查看解析器链:apollographql.com/docs/apollo-server/data/resolvers 您的,已注释掉,Query.posts
解析器不返回帖子列表/数组,然后没有调用链接的 Post
解析器(它应该返回一篇帖子,当 Query.posts 返回所有帖子时不需要帖子字段)
请告诉我们你的users
数组的值
那个Post.id
解析器没有意义,它需要返回一个ID!
,但似乎返回一个帖子数组。你的意思是写一个User.posts
解析器吗?
【参考方案1】:
用户(或更多语义:userById)查询
您的第一个查询运行良好。
您还应该添加一些data
(否则您会收到错误"message": "users is not defined",
)。
执行查询:
query
user(id: 1)
id
username
基本代码示例:
const ApolloServer, gql = require("apollo-server");
const users = [
id: 1,
username: "Kate Chopin"
,
id: 2,
username: "Paul Auster"
];
// The GraphQL schema in string form
const typeDefs = gql`
type Query
userById(id: ID!): User
type User
id: ID!
username: String
`;
// The resolvers
const resolvers =
Query:
userById: (parent, args, context, info) =>
return users.find((user) => user.id === Number(args.id));
;
const server = new ApolloServer(
typeDefs,
resolvers
);
server.listen().then(( url ) =>
console.log(`? Server ready at $url`);
);
帖子查询(或更语义化:postById
):
关于 posts
- 您的查询是 posts
并且没有解析器匹配 + 看起来您做了一点“沙拉”。
最好遵循这个例子(Same idea 仅 books/authors 而不是 posts/user): https://www.apollographql.com/docs/apollo-server/getting-started/
接下来,阅读此解析器链:https://www.apollographql.com/docs/apollo-server/data/resolvers/#resolver-chains
再次hello world
示例
const posts = [
id: 1,
name: "Article One"
,
id: 2,
name: "Article Two"
];
const users = [
id: 1,
username: "Kate Chopin",
posts: posts
,
id: 2,
username: "Paul Auster"
];
// The GraphQL schema in string form
const typeDefs = gql`
type Query
userById(id: ID!): User
type User
id: ID!
username: String
posts: [Post]
type Post
id: ID!
name: String
`;
// The resolvers
const resolvers =
Query:
userById: (parent, args, context, info) =>
return users.find((user) => user.id === Number(args.id));
;
const server = new ApolloServer(
typeDefs,
resolvers
);
server.listen().then(( url ) =>
console.log(`? Server ready at $url`);
);
查询:
【讨论】:
这很好,但看起来我可以使用这样的解析器:用户: 帖子:(父,参数,上下文,信息)=> console.log(posts.filter(post => post.user_id === Number(parent.id))) return posts.filter(post => post.user_id === Number(parent.id)) 那么 Users -> Posts 的逻辑是' t 烘烤,除非要求。以上是关于Apollo GraphQL - 未触发解析器的主要内容,如果未能解决你的问题,请参考以下文章