防止在 firebase 云功能或 Apollo 服务器配置中解析请求正文

问题描述

我使用在 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 (将#修改为@)