我正在构建一个Next.JS应用,它将从Python API和Postgres数据库中获取数据。
通常这很简单,除了要求我需要从服务器端而不是用户的客户端发送所有请求。
我一直在和getInitialProps
一起工作,但我不相信这是我需要的完整解决方案,因为README
中的这一行:
对于初始页面加载,
getInitialProps
仅在服务器上执行。只有在通过链接组件或使用路由API导航到不同路由时,才会在客户端上执行getInitialProps
。
似乎getInitialProps
是为初始页面加载而设计的,而不是为后续的服务器端数据提取而设计的。
如何以所有请求来自服务器端的方式设计我的Next.JS应用程序?
注意:
提前获得任何帮助
答案 0 :(得分:8)
我通过在Express!中包装Next.JS找到了解决方案。
我已将一个简单的示例项目推送到GitHub here
repo有一个很好的README以及代码中的注释,详细说明了正在发生的事情。
快速破解:
nextApp.render(...)
来显式呈现页面。请参阅server.js nextApp.render(...)
呈现页面之前发出服务器端请求。见server.js。nextApp.render
在ctx
的上下文(getInitialProps
)参数中为页面提供传递的值。您可以在this.props
页面中将这些值设置为getInitialProps
。请参阅stars.js 建议和改进欢迎!
答案 1 :(得分:0)
我认为这只是通过 getServerSideProps()
Official Docs 完成的。就像它所说的一样简单:“如果您从页面导出名为 getServerSideProps 的异步函数,Next.js 将使用 getServerSideProps 返回的数据在 每个 请求上预渲染此页面”