GraphQL服务端指南

Schema 定义

const typeDefs = `#graphql type User { id: ID! name: String! email: String posts: [Post!]! } type Post { id: ID! title: String! body: String! author: User! } type Query { users: [User!]! user(id: ID!): User } type Mutation { createUser(name: String!, email: String): User! deleteUser(id: ID!): Boolean! } type Subscription { userCreated: User! } `;

Apollo Server 配置

import { ApolloServer } from '@apollo/server'; import { startStandaloneServer } from '@apollo/server/standalone'; const resolvers = { Query: { users: async (_, __, { db }) => db.user.findMany(), user: async (_, { id }, { db }) => db.user.findUnique({ where: { id } }), }, Mutation: { createUser: async (_, args, { db, user }) => { if (!user) throw new GraphQLError('Unauthorized', { extensions: { code: 'UNAUTHENTICATED' } }); return db.user.create({ data: args }); }, }, User: { posts: async (parent, _, { db }) => db.post.findMany({ where: { authorId: parent.id } }), }, }; const server = new ApolloServer({ typeDefs, resolvers }); const { url } = await startStandaloneServer(server, { context: async ({ req }) => ({ db: prisma, user: await getUser(req.headers.authorization), }), }); console.log(`Server at ${url}`);