微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决防止在 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 举报,一经查实,本站将立刻删除。