当我使用Router.push()重定向时,fs.readdirSync不起作用

时间:2019-10-19 01:51:22

标签: reactjs next.js

我创建了一个页面,当用户单击按钮时,该页面会将他重定向到根页面('/')。但是根页面上有一个代码服务器端,当我由Router.push()重定向时不会触发该代码,因此会抛出错误,因为有一个使用节点fs的代码。

所以,我的问题是:那是一种重定向和执行此页面服务器端的方法吗?

注意:必须执行服务器端代码(因为它列出了服务器内部的文件)

代码在github上:

TopWiki /,重定向

html {
  height: 100%;
}
body {
  height: 100%;
}

index.js,根页面,这是必须在服务器端执行的代码

  goTo = (item) => {
    console.log('goTo: ', item);
    Router.push(`/`);
  }

Articles.js(引发错误的FS)

const versions = articles.getVersions(`articles/${query.article}/`);

1 个答案:

答案 0 :(得分:0)

对于SSR,只有在客户端浏览器中加载的第一页才会在服务器端呈现。所有其他页面都在客户端本身上路由。

强迫它们在服务器端执行只会增加延迟和服务器负载。相反,您可以做的是确保getInitialProps中的代码可以同时在服务器端和客户端运行。

由于您已经具有启动并运行ExpressJS的自定义服务器配置,我建议将Articles服务作为路由移动到server.js中,然后在getInitialProps中调用该API。

注意:您可以检查reqresgetInitialProps参数的存在,以执行服务器端仅 所需的代码。