当我使用 Router.push() 重定向时,fs.readdirSync 不起作用
fs.readdirSync not work when I redirect with 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}/`);
Articles.js(报错的FS)
let articles = fs.readdirSync(folder);
对于 SSR,只有在客户端浏览器上加载的第一个页面会在服务器端呈现。所有其他页面都在客户端本身进行路由。
强制在服务器端执行它们只会增加延迟和服务器负载。相反,您可以做的是确保 getInitialProps
中的代码在服务器端和客户端都可以是 运行。
因为你已经有了一个自定义服务器配置,ExpressJS 已经启动 运行ning,我建议将文章服务作为路由移动到 server.js
中,然后调用它 API在 getInitialProps
.
注意:您可以检查 getInitialProps
中是否存在 req
和 res
参数,以执行 仅 所需的代码服务器端。
我创建了一个页面,当用户点击一个按钮时,它会将他重定向到根页面 ('/')。但是根页面有一个代码服务器端,当我通过 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 已经启动 运行ning,我建议将文章服务作为路由移动到 server.js
中,然后调用它 API在 getInitialProps
.
注意:您可以检查 getInitialProps
中是否存在 req
和 res
参数,以执行 仅 所需的代码服务器端。