Next.JS:如何在服务器端进行所有请求

时间:2018-04-20 22:03:37

标签: javascript reactjs typescript server-side nextjs

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

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

我一直在和getInitialProps一起工作,但我不相信这是我需要的完整解决方案,因为README中的这一行:

  

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

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

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

注意:

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

提前获得任何帮助

2 个答案:

答案 0 :(得分:8)

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

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

repo有一个很好的README以及代码中的注释,详细说明了正在发生的事情。

快速破解:

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

建议和改进欢迎!

答案 1 :(得分:0)

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

相关问题