// server.js
import { ApolloServer } from '@apollo/server';
import { startStandaloneServer } from '@apollo/server/standalone';
// Schema 定义
const typeDefs = `#graphql
type Query {
hello: String
users: [User]
user(id: ID!): User
}
type Mutation {
createUser(name: String!, email: String!): User
updateUser(id: ID!, name: String, email: String): User
deleteUser(id: ID!): Boolean
}
type User {
id: ID!
name: String!
email: String!
posts: [Post]
}
type Post {
id: ID!
title: String!
content: String!
author: User!
}
`;
// 模拟数据
const users = [
{ id: '1', name: '张三', email: 'zhangsan@example.com' },
{ id: '2', name: '李四', email: 'lisi@example.com' },
];
// Resolver 实现
const resolvers = {
Query: {
hello: () => 'Hello, Apollo Server!',
users: () => users,
user: (parent, { id }) => users.find(user => user.id === id),
},
Mutation: {
createUser: (parent, { name, email }) => {
const user = { id: String(users.length + 1), name, email };
users.push(user);
return user;
},
updateUser: (parent, { id, name, email }) => {
const userIndex = users.findIndex(user => user.id === id);
if (userIndex === -1) throw new Error('User not found');
if (name) users[userIndex].name = name;
if (email) users[userIndex].email = email;
return users[userIndex];
},
deleteUser: (parent, { id }) => {
const userIndex = users.findIndex(user => user.id === id);
if (userIndex === -1) return false;
users.splice(userIndex, 1);
return true;
},
},
User: {
posts: (parent) => {
// 实现获取用户帖子的逻辑
return [];
},
},
};
// 创建服务器
const server = new ApolloServer({
typeDefs,
resolvers,
});
// 启动服务器
const { url } = await startStandaloneServer(server, {
listen: { port: 4000 },
});
console.log(`🚀 Server ready at ${url}`);