问题描述
我使用在 firebase 函数上运行的 next.js,
和 next.js 的 api 路由有配置“bodyParser: false”——这样我就可以防止正文解析,
进一步当我将 (req,res ) 传递给 Apollo 服务器时,它可以正常工作。
但是如果我从云函数调用运行 Apollo 的 next.js,不幸的是,身体也在那里解析,
进一步的 Apollo 服务器失败,永远等待解析 body(已经被函数解析),
所以 next.js 的配置选项 ""bodyParser: false"" 在那里已经没用了。
如何防止函数体解析?是否有任何配置选项? 或者 Be Apollo 服务器可能有一些选项来通知之前已经解析过的主体?
样本:https://github.com/sealmu/test-course/tree/test
test-course/pages/api/graphql/index.ts 行:101 const handler = apolloServer.createHandler({ path: '/api/graphql' }); - 如果正文已经解析,则此处失败。
const getApolloServerHandler = async ({ res }: { res?: NextApiResponse }): Promise<any> => {
if (res) {
console.log('res init');
}
const apolloServer = new ApolloServer({
typeDefs: [todoTypes],resolvers: [todoResolvers],introspection: true,playground: true,context: ({ req,res }) => {
if (!req || !res) console.log('no');
return { };
},});
const handler = apolloServer.createHandler({ path: '/api/graphql' });
const corsHandler = cors(handler);
return corsHandler;
};
export const config = {
api: {
bodyParser: false,},};
export default async (req: NextApiRequest,res: NextApiResponse): Promise<void> => {
const apolloServerHandler = globalThis.apolloServerHandler || await getApolloServerHandler({ res: null });
globalThis.apolloServerHandler = apolloServerHandler;
return apolloServerHandler(req,res);
};
test-course/function.js - 和正文已经在这里解析。
const nextjsHandle = server.getRequestHandler();
exports.nextServer = https.onRequest((req,res) => {
return server.prepare().then(() => nextjsHandle(req,res));
});
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)