Next.js中apollo-server-micro调用createHandler需先await server.start()报错如何解决
问题原因
你使用的是apollo-server-micro 3.x及以上版本,该版本强制要求必须先完成服务器启动流程,再调用处理函数创建方法,你当前代码直接在实例化ApolloServer后就调用createHandler,缺少等待server.start()执行的步骤,因此触发报错。
解决方案
仅需修改/api/graphql.js文件的代码,调整启动逻辑即可,你的resolver、schema文件无需改动:
import { ApolloServer } from "apollo-server-micro"; import { resolvers } from "../../apis/resolver"; import { typeDefs } from "../../apis/schemas"; const apolloServer = new ApolloServer({ typeDefs, resolvers }); export const config = { api: { bodyParser: false } }; // 缓存服务启动Promise,避免重复初始化 const serverStartPromise = apolloServer.start() export default async function handler(req, res) { // 等待服务启动完成后再处理请求 await serverStartPromise return apolloServer.createHandler({ path: "/api/graphql" })(req, res) }
修改后重启项目即可正常访问GraphQL接口。
内容的提问来源于stack exchange,提问作者Hussam Khatib
相关产品推荐
相关产品推荐

