为什么我的客户端代码在节点后端被编译和运行?
Why is my client side code being compiled and ran on node backend?
我是 SSR 的新手,所以我不确定这个问题和我的解决方案是否是标准做法,但我无法想象。
我的目标是拥有一个允许用户 add/remove 页面上的项目的动态页面。我最初编写此组件的目的是将其仅用作客户端反应项目,但现在我想将其放在服务器上。现在,当我 运行 将我的代码添加到新项目时,我 运行 遇到了一些与我的后端有关的错误 运行在客户端成为 运行。
例如,我 运行 之前 遇到过这个问题,我能够使用 Janky 解决方案解决这个问题,我确保它正在传递客户端代码并停止执行从后端传递的代码。现在我不得不重构我的代码以不使用 fetch()
函数,因为它不是节点后端识别的函数,它现在抱怨我使用 document
对象,因为这不是节点。
我可以继续导入新模块来修复错误以防止我的网站崩溃,但我感觉我就像在一艘小船上用胶带修补新的漏洞,等待找到下一个漏洞。
如果需要的话,这是我的配置图片我在之前的堆栈溢出问题中也有其他图片(link 以上)
对于 bundle.js
问题,我不确定为什么会发生。
对于fetch
的问题,我认为这是SSR的一个常见问题,如果你自己实现它,你需要在你的应用程序的不同地方处理条件:
if(!!window) {
// do client-side stuff like accessing
// window.document
}
基本上,SSR 最常见的用法是在服务器端处理应用程序的首次执行。这包括:
- 路线解析
- 正在获取数据(使用 nodejs http 模块)
- Hydrating stores(如果你使用 redux 或其他数据库)
- 渲染UI
执行完成后,您的服务器 returns 带有水化存储的捆绑 js 应用程序和 UI 以及 returns 到客户端。后续的请求或者路由更新都会在客户端执行,所以可以直接使用fetch
或者react-router
做SSR的优点是:
- 很棒的第一个内容
- 非常适合 SEO
- 客户端机器做更少的工作
等框架
我是 SSR 的新手,所以我不确定这个问题和我的解决方案是否是标准做法,但我无法想象。
我的目标是拥有一个允许用户 add/remove 页面上的项目的动态页面。我最初编写此组件的目的是将其仅用作客户端反应项目,但现在我想将其放在服务器上。现在,当我 运行 将我的代码添加到新项目时,我 运行 遇到了一些与我的后端有关的错误 运行在客户端成为 运行。
例如,我 运行 之前 fetch()
函数,因为它不是节点后端识别的函数,它现在抱怨我使用 document
对象,因为这不是节点。
我可以继续导入新模块来修复错误以防止我的网站崩溃,但我感觉我就像在一艘小船上用胶带修补新的漏洞,等待找到下一个漏洞。
如果需要的话,这是我的配置图片我在之前的堆栈溢出问题中也有其他图片(link 以上)
对于 bundle.js
问题,我不确定为什么会发生。
对于fetch
的问题,我认为这是SSR的一个常见问题,如果你自己实现它,你需要在你的应用程序的不同地方处理条件:
if(!!window) {
// do client-side stuff like accessing
// window.document
}
基本上,SSR 最常见的用法是在服务器端处理应用程序的首次执行。这包括:
- 路线解析
- 正在获取数据(使用 nodejs http 模块)
- Hydrating stores(如果你使用 redux 或其他数据库)
- 渲染UI
执行完成后,您的服务器 returns 带有水化存储的捆绑 js 应用程序和 UI 以及 returns 到客户端。后续的请求或者路由更新都会在客户端执行,所以可以直接使用fetch
或者react-router
做SSR的优点是:
- 很棒的第一个内容
- 非常适合 SEO
- 客户端机器做更少的工作