Next JS api 路由类型为 graphql 错误(解析器不是函数)
Posted
技术标签:
【中文标题】Next JS api 路由类型为 graphql 错误(解析器不是函数)【英文标题】:Next JS api routes with type graphql error (resolver is not a function) 【发布时间】:2020-09-18 04:07:25 【问题描述】:我想使用 TypeGraphQL 使用 graphql 设置一个新的 Next JS 项目。我认为跳过独立服务器并使用 Next JS 提供的 API 路由是个好主意。 Here 是我受到启发的一个例子。不幸的是,我无法启动并运行 graphql。
下一个 JS 启动时没有错误,但在向 api/graphql
发送请求后立即抛出一个错误
TypeError: resolver is not a function
at apiResolver (/home/vavra/Projects/project-united/node_modules/next/dist/next-server/server/api-utils.js:6:7)
at DevServer.handleApiRequest (/home/vavra/Projects/project-united/node_modules/next/dist/next-server/server/next-server.js:43:427)
at async Object.fn (/home/vavra/Projects/project-united/node_modules/next/dist/next-server/server/next-server.js:35:764)
at async Router.execute (/home/vavra/Projects/project-united/node_modules/next/dist/next-server/server/router.js:28:28)
at async DevServer.run (/home/vavra/Projects/project-united/node_modules/next/dist/next-server/server/next-server.js:44:494)
at async DevServer.handleRequest (/home/vavra/Projects/project-united/node_modules/next/dist/next-server/server/next-server.js:13:133)
这是我的文件 src/pages/api/graphql
import Resolver, Query from "type-graphql";
import ApolloServer from "apollo-server-micro";
import buildSchema from "type-graphql";
import "reflect-metadata";
@Resolver()
class HelloResolver
@Query(() => String)
hello()
return "hello";
export const config =
api:
bodyParser: false,
,
;
export default (async () =>
const schema = await buildSchema(
resolvers: [HelloResolver],
);
const apolloServer = new ApolloServer( schema );
return apolloServer.createHandler( path: "/api/graphql" );
)();
有什么帮助吗?
【问题讨论】:
你解决了吗?我也在尝试在 NextJS 应用程序中设置 TypeGraphQL 并遇到同样的问题。我想知道我是否需要破解我的下一个应用程序才能使用 express (bleh)。 @CodeAndCats 不走运,我没有找到任何解决方案,所以我用 Express 运行我的服务器。 【参考方案1】:here 他们在谈论一个类似的问题,我通过这个表单使用 type-graphql 使用 nextjs。
pages/api/graphql
import 'reflect-metadata';
import ApolloServer from 'apollo-server-micro';
import buildSchema from 'type-graphql';
import youResolver from '../resolvers/youResolver';
import NextApiRequest, NextApiResponse from 'next';
let apolloServerHandler: (req: any, res: any) => Promise<void>;
const getApolloServerHandler = async () =>
if (!apolloServerHandler)
const schema = await buildSchema(
resolvers: [youResolver],
);
apolloServerHandler = new ApolloServer( schema ).createHandler(
path: '/api/graphql',
);
return apolloServerHandler;
;
export default async (req: NextApiRequest, res: NextApiResponse) =>
const apolloServerHandler = await getApolloServerHandler();
return apolloServerHandler(req, res);
;
export const config = api: bodyParser: false ;
【讨论】:
以上是关于Next JS api 路由类型为 graphql 错误(解析器不是函数)的主要内容,如果未能解决你的问题,请参考以下文章
在开发模式 localhost 中从 Next.js 应用程序请求在不同端口上运行的 Graphql api
无法在单个 GraphQL 查询中组合本地和远程数据(Next.js + Apollo)
使用 Next.js 10 TypeScript 项目缓存 MongoDb 连接 - API 路由
Apollo Server + Next.js - GraphQL Schema 未更新
ReactJS/Next.js:CRA 代理不适用于 Next.js(尝试将 API 请求路由到 Express 服务器)