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



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

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

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

代码在 github 上:

  • https://github.com/vinicius-a-portela/dyn-wiki/blob/master/pages/wiki/index.js
  • https://github.com/vinicius-a-portela/dyn-wiki/blob/master/components/TopWiki/index.js

TopWiki/, 重定向

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

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

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

文章.js(引发错误的 FS(

let articles = fs.readdirSync(folder);

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

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

由于您已经启动并运行了 ExpressJS 的自定义服务器配置,因此我建议将文章服务作为server.js内部的路由移动,然后在getInitialProps中调用该 API。

注意:您可以检查getInitialProps中是否存在reqres参数,以执行仅在服务器端需要的代码。

最新更新