Apollo Server与Next.js API Router配合使用实践

Apollo Server与Next.js API Router配合使用实践

Tags
前端
Apollo
GraphQL
description
如何在next.js中使用Apollo Server(GraphQL)
更新时间
Last updated January 28, 2022

基本原理

  • /pages/api 文件夹下创建graphql.ts 文件,并在其中初始化和导出ApolloServer.createHandler 返回的实例
  • 其实就是将API Route的请求全部转给Apollo Server 去做处理
 

版本问题

 
apollo-server-micro 近一个月刚刚更新到3.0.x版本,而这个的使用方法和2.x.x略有不同,
 
2.0.x 中的使用方法如下
import { ApolloServer } from "apollo-server-micro"; import { typeDefs } from "./schemas"; import { resolvers } from "./resolvers"; const apolloServer = new ApolloServer({ typeDefs, resolvers }); export const config = { api: { bodyParser: false } }; // 直接返回apolloServer.createHanlder的结果作为exports.default的值 export default apolloServer.createHandler({ path: "/api/graphql" });
 
3.0.x 中的使用方法
import { ApolloServer } from "apollo-server-micro"; import { typeDefs } from "../../graphql/schemas"; import { resolvers } from "../../graphql/resolvers"; console.log(typeof resolvers) const apolloServer = new ApolloServer({ typeDefs, resolvers }); export const config = { api: { bodyParser: false } }; // 1.需要调用apolloServer.start // 2. 需要用module.exports去接收返回的Promise module.exports = apolloServer.start().then(() => apolloServer.createHandler({ path: "/api/graphql" }));