gpt4 book ai didi

javascript - 在 NextJS 中,如何将 server.js 中的数据传递给 _app.js?

转载 作者:行者123 更新时间:2023-12-05 00:32:04 24 4
gpt4 key购买 nike

在我的 NextJS 项目中,我使用 koa作为 server.js 中的 Web 框架文件,我想做的是如下,

  • 做一些外部 api 调用以在 server.js 中生成一些自定义数据每个请求,
  • 然后将生成的数据传给_app.js ,以便所有页面可以通过 Prop 或上下文共享数据。

  • 我的问题是我们如何传递 server.js 中生成的数据?至 _app.js或页面?
    下面是一些代码示例,
    //////////////////////////////////////////////////
    // server.js
    import Koa from "koa";
    import Router from "koa-router";

    const verified_names = {};
    const handle = app.getRequestHandler(); // NextJS use this to handle each request

    app.prepare().then(async () => {
    const server = new Koa();
    const router = new Router();
    ...

    // in verifyNameFunc, if name is verified, will set verified_names[name] = some_data
    router.get("/verify_name", verifyNameFunc);

    router.get("(.*)", async (ctx) => {
    // custom logic starts here: if name is not verified, redirect to /verify_name
    const name = ctx.query.name;
    if (verified_names[name] === undefined) {
    ctx.redirect(`/verify_name?name=${name}`);
    }
    // HERE: do some external api calls and generate some data
    var custom_data = custom_logic(verified_names[name]);

    // I think here starts rendering the pages (i.e. enters the execution of `_app.js` and pages)
    // QUESTION: how to pass the above `custom_data` to _app.js or pages?
    await handle(ctx.req, ctx.res);
    }
    });

    server.use(router.routes());
    server.listen(...);

    });

    //////////////////////////////////////////////////
    // _app.js

    class MyApp extends App {
    ...
    }

    MyApp.getInitialProps = async ({ ctx }) => {
    // Can we get the `custom_data` from server.js here?
    ...
    };
    我要保留 custom_logic的原因里面 server.js就是它,
  • 如果 name未经验证,将发生重定向和 verifyNameFunc将一些数据设置为 verified_names .

  • 我不确定这个重定向是否可以移动到 _app.js也?

    最佳答案

    您可以使用getInitialProps并在 __app.tsx 中进行重定向如果你需要。
    https://nextjs.org/docs/api-reference/data-fetching/getInitialProps
    此外,很容易检查名称是否在 __app.tsx 中得到验证。然后在此基础上渲染一个不同的 child 。我不认为你需要一个完整的自定义服务器。
    也看看https://nextjs.org/blog/next-10-2#routing-based-on-headers-and-query-string-parameters .

    关于javascript - 在 NextJS 中,如何将 server.js 中的数据传递给 _app.js?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69599068/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com