【问题标题】:Next JS api routes with type graphql error (resolver is not a function)Next JS api 路由类型为 graphql 错误(解析器不是函数)
【发布时间】: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 运行我的服务器。

标签: next.js apollo-server typegraphql


【解决方案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 } };

【讨论】:

    猜你喜欢
    • 2017-08-10
    • 2017-07-21
    • 2021-11-17
    • 2019-05-17
    • 1970-01-01
    • 2019-03-05
    • 2020-07-21
    • 1970-01-01
    • 2021-01-23
    相关资源
    最近更新 更多