Next.js 下一个JS api路由类型为graphql错误(解析器不是函数)
我想使用graphql建立一个新的下一个JS项目。我认为跳过独立服务器并使用Next JS提供的API路由是一个好主意。这是一个启发我的例子。不幸的是,我无法启动并运行graphql 下一个JS启动时没有错误,但在将请求发送到Next.js 下一个JS api路由类型为graphql错误(解析器不是函数),next.js,apollo-server,typegraphql,Next.js,Apollo Server,Typegraphql,我想使用graphql建立一个新的下一个JS项目。我认为跳过独立服务器并使用Next JS提供的API路由是一个好主意。这是一个启发我的例子。不幸的是,我无法启动并运行graphql 下一个JS启动时没有错误,但在将请求发送到api/graphql TypeError: resolver is not a function at apiResolver (/home/vavra/Projects/project-united/node_modules/next/dist/next-ser
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" });
})();
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 } };
这方面有什么帮助吗?他们讨论了一个类似的问题,使用这个表单,我使用graphql类型处理nextjs
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" });
})();
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 } };
导入“反映元数据”;
从“apollo server micro”导入{apollo server};
从'type graphql'导入{buildSchema};
从“../resolvers/youResolver”导入youResolver;
从“下一步”导入{NextApiRequest,nextapireresponse};
让apolloServerHandler:(req:any,res:any)=>承诺;
const getApolloServerHandler=async()=>{
如果(!服务器处理程序){
const schema=wait buildSchema({
解决者:[您的解决者],
});
apolloServerHandler=新的ApolloServer({schema}).createHandler({
路径:'/api/graphql',
});
}
返回处理程序;
};
导出默认异步(请求:NextApiRequest,res:nextapireresponse)=>{
const apolloServerHandler=等待getApolloServerHandler();
返回服务器处理程序(req、res);
};
export const config={api:{bodyParser:false};
他们讨论了一个类似的问题,使用这个表单,我使用graphql类型处理nextjs
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" });
})();
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 } };
导入“反映元数据”;
从“apollo server micro”导入{apollo server};
从'type graphql'导入{buildSchema};
从“../resolvers/youResolver”导入youResolver;
从“下一步”导入{NextApiRequest,nextapireresponse};
让apolloServerHandler:(req:any,res:any)=>承诺;
const getApolloServerHandler=async()=>{
如果(!服务器处理程序){
const schema=wait buildSchema({
解决者:[您的解决者],
});
apolloServerHandler=新的ApolloServer({schema}).createHandler({
路径:'/api/graphql',
});
}
返回处理程序;
};
导出默认异步(请求:NextApiRequest,res:nextapireresponse)=>{
const apolloServerHandler=等待getApolloServerHandler();
返回服务器处理程序(req、res);
};
export const config={api:{bodyParser:false};
您是否设法解决了这个问题?我还试图在NextJS应用程序中设置TypeGraphQL,但遇到了同样的问题。我想知道我是否需要破解我的下一个应用程序来使用express(bleh)。@CodeAndCats不走运,我没有找到任何解决方案,所以我用express运行了我的服务器。你解决了吗?我还试图在NextJS应用程序中设置TypeGraphQL,但遇到了同样的问题。我想知道我是否需要破解我的下一个应用程序来使用express(bleh)。@CodeAndCats不走运,我没有找到任何解决方案,所以我用express运行我的服务器。