【问题标题】:Next.JS: How to make ALL requests server-sideNext.JS:如何在服务器端发出所有请求
【发布时间】:2018-10-01 16:23:04
【问题描述】:

我正在构建一个Next.JS 应用程序,它将从 Python API 和 Postgres 数据库获取数据。

通常这很简单,除了要求我需要从服务器端发送所有请求,而不是用户的客户端。

我一直在与getInitialProps 合作和探索,但我不确定这是我需要的完整解决方案,因为README 中的这一行:

对于初始页面加载,getInitialProps 将仅在服务器上执行。 getInitialProps 只会在通过 Link 组件或使用路由 API 导航到不同的路由时在客户端上执行。

getInitialProps 似乎是为初始页面加载而设计的,而不是为后续的服务器端数据获取而设计的。

如何设计我的 Next.JS 应用程序,使所有请求都来自服务器端?

注意事项:

  • 每个请求本质上都会导致初始页面加载,这是可以的。
  • 用户 Client 可以与 Node (Next.JS) 服务器对话,因为它是公开的。我目前正在尝试将 Next.JS 包装在 express server 中。

提前请大家帮忙

【问题讨论】:

    标签: javascript reactjs typescript server-side nextjs


    【解决方案1】:

    我通过在 Express 中包装 Next.JS 找到了解决方案!

    我已经将一个简单的示例项目推送到 GitHub here

    repo 有一个很好的自述文件以及代码中的 cmets,详细说明了正在发生的事情。

    简要介绍:

    • 将 Next.JS 包装在快速服务器中。通过调用 nextApp.render(...) 显式呈现页面,这在标准 Next.JS 应用程序中隐式发生。见server.js
    • 使用快速路由。在使用nextApp.render(...) 呈现页面之前发出服务器端请求。见server.js
    • 使用标准锚标记确保页面请求到达快速服务器。见index.js
    • nextApp.rendergetInitialProps 的上下文 (ctx) 参数中向页面提供传递的值。您可以通过在getInitialProps 中返回这些值来使这些值在页面this.props 中可用。见stars.js

    欢迎提出建议和改进!

    【讨论】:

    • 干得好!它类似于 Razzle
    【解决方案2】:

    这通常是个坏主意。

    SPA 的重点是防止整个页面加载。

    您可以在初始页面请求和后续导航中使用getInitialProps 获取内容,因为每个页面都会调用它。

    接下来鼓励您使用 API 与服务器对话

    【讨论】:

      【解决方案3】:

      我认为这可以通过 getServerSideProps() Official Docs 完成。就像它所说的那样简单:“如果您从页面导出名为 getServerSideProps 的异步函数,Next.js 将使用 getServerSideProps 返回的数据在 每个 请求上预渲染此页面”

      【讨论】:

        猜你喜欢
        • 2016-02-27
        • 2020-06-24
        • 2021-02-14
        • 2020-03-04
        • 2016-05-15
        • 2013-11-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多