要在Apollo Server中获取解析器中父级的父级,您可以使用GraphQL中的上下文(context)对象来传递父级解析器中的数据。下面是一个示例代码:
const { ApolloServer, gql } = require('apollo-server');
// 定义GraphQL模式
const typeDefs = gql`
type User {
id: ID!
name: String
posts: [Post]
}
type Post {
id: ID!
title: String
author: User
}
type Query {
user(id: ID!): User
}
`;
// 模拟数据
const users = [
{
id: "1",
name: "John",
},
{
id: "2",
name: "Jane",
},
];
const posts = [
{
id: "1",
title: "Post 1",
authorId: "1",
},
{
id: "2",
title: "Post 2",
authorId: "2",
},
];
// 定义解析器
const resolvers = {
Query: {
user: (_, { id }) => {
return users.find(user => user.id === id);
},
},
User: {
posts: (parent) => {
return posts.filter(post => post.authorId === parent.id);
},
},
Post: {
author: (parent, _, { dataSources }) => {
const authorId = parent.authorId;
return dataSources.getUserById(authorId);
},
},
};
// 创建Apollo服务器
const server = new ApolloServer({
typeDefs,
resolvers,
context: () => ({
dataSources: {
getUserById: (id) => {
return users.find(user => user.id === id);
},
},
}),
});
// 启动服务器
server.listen().then(({ url }) => {
console.log(`Server ready at ${url}`);
});
在上面的示例中,我们定义了一个User
类型和一个Post
类型,并通过User
类型中的posts
字段来获取用户的所有帖子。在Post
类型中,我们使用上下文对象中的dataSources
来获取帖子的作者。
在创建Apollo服务器时,我们使用context
参数定义了一个返回上下文对象的函数。这个上下文对象包含了一个getUserById
函数,用于根据用户ID获取用户信息。在Post
类型的author
字段解析器中,我们使用dataSources.getUserById
来获取帖子的作者。
这样,您就可以在解析器中访问父级的父级数据。