在Apollo Server中,可以使用GraphQL的参数传递功能将参数传递给嵌套的解析器。以下是一个使用Apollo Server和GraphQL的示例代码:
首先,安装所需的依赖项:
npm install apollo-server graphql
然后,创建一个GraphQL模式文件(schema.graphql):
type Query {
user(id: ID!): User
}
type User {
id: ID!
name: String!
posts: [Post]
}
type Post {
id: ID!
title: String!
}
接下来,创建一个服务器文件(server.js):
const { ApolloServer, gql } = require('apollo-server');
// 模拟的数据
const users = [
{ id: '1', name: 'John Doe', postIds: ['1', '2'] },
{ id: '2', name: 'Jane Smith', postIds: ['3'] },
];
const posts = [
{ id: '1', title: 'Post 1' },
{ id: '2', title: 'Post 2' },
{ id: '3', title: 'Post 3' },
];
// 定义解析器
const resolvers = {
Query: {
user: (_, { id }) => {
// 查找用户
const user = users.find(user => user.id === id);
return user;
},
},
User: {
posts: (user) => {
// 获取用户的帖子ID
const postIds = user.postIds;
// 查找对应的帖子
const userPosts = posts.filter(post => postIds.includes(post.id));
return userPosts;
},
},
};
// 创建Apollo服务器
const server = new ApolloServer({
typeDefs: gql`
${require('fs').readFileSync('./schema.graphql', 'utf8')}
`,
resolvers,
});
// 启动服务器
server.listen().then(({ url }) => {
console.log(`Server ready at ${url}`);
});
在这个例子中,我们有一个User
类型和一个Post
类型。User
类型有一个posts
字段,该字段是一个帖子数组。user
查询接受一个id
参数,并返回具有相应id
的用户。
在User
类型的解析器中,我们获取用户的postIds
,然后使用这些postIds
查找对应的帖子。
通过运行node server.js
启动服务器,您现在可以使用GraphQL客户端查询用户及其帖子:
query {
user(id: "1") {
name
posts {
title
}
}
}
这将返回具有ID为1的用户的名称和帖子标题的响应。