reactjs - 当我使用 Router.push() 重定向时,fs.readdirSync 不起作用
问题描述
我创建了一个页面,当用户单击一个按钮时,它会将他重定向到根页面('/')。但是根页面有一个代码服务器端,当我通过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}/`);
Articles.js(抛出错误的 FS)
let articles = fs.readdirSync(folder);
解决方案
对于 SSR,只有在客户端浏览器上加载的第一个页面才会在服务器端呈现。所有其他页面都在客户端本身路由。
强制它们在服务器端执行只会增加延迟和服务器负载。相反,您可以做的是确保里面的代码getInitialProps
可以在服务器端和客户端运行。
由于您已经使用 ExpressJS 启动并运行了自定义服务器配置,因此我建议将 Articles 服务作为路由移动到内部server.js
,然后在getInitialProps
.
注意:您可以检查是否存在req
和res
参数getInitialProps
以执行仅在服务器端需要的代码。
推荐阅读
- javascript - RxJS 依次执行两个 observable
- javascript - 单击事件未触发,但鼠标悬停工作
- python - 是否可以在 Tensorflow 中输入动态形状矩阵?
- mqtt - 如何订阅多个 MQTT 客户端以排长队
- reactjs - 我收到有关 react-router 的渲染链接组件的错误
- macos - TCPDF 错误:无法创建输出文件 (Mac)
- php - 如果管理员登录,添加更多导航链接
- hibernate - 无法让 FetchType.EAGER 与 @ElementCollection 一起使用
- azure - Azure 应用程序网关升级
- vue.js - npm 安装 -g
E401 失败