You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Next.js 13.2 App目录API路由中启动GraphQL服务器?

问题排查与修复方案

你的代码存在几个关键问题,导致Next.js 13.2 App Router下的GraphQL服务器无法启动:

1. 错误调用请求处理函数

startServerAndCreateNextHandler(server)返回的是一个请求处理函数,你需要传入当前的request对象并执行它,而不是直接返回这个函数本身。

2. 缺少POST方法支持

GraphQL的查询和突变请求通常使用POST方法,你的代码只导出了GET方法,会导致大部分GraphQL请求失败,同时也会影响Apollo Playground的正常使用。

3. TypeScript类型缺失(可选)

如果使用TypeScript,Request类型需要从next/server导入,否则会出现类型错误。

修复后的代码

import { ApolloServer } from '@apollo/server';
import { startServerAndCreateNextHandler } from '@as-integrations/next';
import { Request } from 'next/server'; // 导入Request类型

const resolvers = {
  Query: {
    hello: () => 'world',
  },
};

const typeDefs = `#graphql
  type Query {
    hello: String
  }
`;

// 单例模式创建Apollo Server,避免重复初始化
const server = new ApolloServer({
  resolvers,
  typeDefs,
});

// 导出GET和POST方法
export async function GET(request: Request) {
  return startServerAndCreateNextHandler(server)(request);
}

export async function POST(request: Request) {
  return startServerAndCreateNextHandler(server)(request);
}

额外优化建议

  • 保持Apollo Server实例为单例,避免每次请求都重新创建服务器实例,提升性能。
  • 确认已安装所有必要依赖:@apollo/server、@as-integrations/next、graphql,TypeScript项目需补充@types/node等类型包。

内容的提问来源于stack exchange,提问作者Raja Jayaraman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 07:07:09