import { gql } from "apollo/client";
import { ApolloServer } from "@apollo/server";
import { startServerAndCreateNextHandler } from "@as-integrations/next";
import { NextRequest } from "next/server";
export const runtime = "nodejs";
const typeDefs = gql`
type Mutation {
hello(name: String): String
}
type Query {
getName: String
}
`;
const resolvers = {
Mutation: {
hello: (name: string) => `Hello, ${name}`,
},
Query: {
getName: () => "seiya",
},
};
const handler = startServerAndCreateNextHandler<NextRequest>(
new ApolloServer({
typeDefs,
resolvers,
}),
{
context: (req) => Promise.resolve({ req }),
},
);
export { handler as GET, handler as POST };
runtimeの指定はデフォルトの nodejs
であればそのままでいいが、どこかでデフォルトを edge
にしていると Can't resolve 'crypto'
というエラーが出てしまうので、明示的に nodejs
として指定したほうがいい。