【问题标题】:ASP.NET Core 3.1 with React - Server Side Rendering / Pre-rendering - two web services required?带有 React 的 ASP.NET Core 3.1 - 服务器端渲染/预渲染 - 需要两个 Web 服务?
【发布时间】:2020-04-10 06:48:06
【问题描述】:

在 ASP.NET Core 2.2 中,拥有一个带有 React 前端和工作服务器端渲染的 ASP.NET Core 网站相当简单——因为 ASP.NET Core 中开箱即用地支持 SSR +React 模板,内部运行NodeServices 以使用节点执行javascript。

但是,对于 ASP.NET Core 3.1,事情不再那么容易了,主要是因为 this linkSpaServicesNodeServices 类已被声明为过时并且将在 .NET 5 中删除。所以不再使用来自 C# 的节点执行 javascript。

现在,除了信息之外,ASP.NET Core 2.2 中建议的服务器端渲染现在已经过时,我发现的唯一建议是从上面的文章:

要启用服务器端预渲染和热模块重新加载等功能,请参阅相应 SPA 框架的文档。

但如果我理解正确的话,要进行基于反应的服务器端渲染,我需要有一个 node.js 服务器,它将在服务器端执行渲染。

这是否意味着,如果我想要一个带有 React 前端和 SSR 的 ASP.NET Core 3.1 网站 - 我应该有一个用于 WebAPI 的 ASP.NET Core 项目,以及另一个单独的 Node.JS 项目用于带 SSR 的前端?

然后将它们部署在两个单独的 Azure AppServices 上?

这是 ASP.NET Core + React 项目的推荐架构吗?

【问题讨论】:

    标签: asp.net asp.net-core


    【解决方案1】:

    在花了一些时间研究之后,这是当前的选择:

    • 在 .NET Core 3.1 上使用 NodeServicesobsolete 标志
    • 为后端 (asp.net) 和前端 (node.js) 创建单独的项目
    • fork/copy NodeServices 并自己维护
    • 希望在 .NET 5 发布之前的几个月内会有一个社区驱动的 NodeServices 分支,但最终会被删除

    【讨论】:

    • 你能提供任何相关的文章或代码示例吗?新开发者可能不理解您上面列出的要点。
    【解决方案2】:

    我遇到了完全相同的问题。我花了几个星期来创建一个前端与后端分开的新设置。

    我发布了准备好的boilerplate on GitHub,并写了一篇博文,详细解释了如何启用server-side rendering with ASP.NET Core and React。该解决方案是 CRA(创建 React 应用程序)、CRA Storybook 和标准 ASP.NET Core MVC 模板的组合。

    长话短说,我构建了我的自定义 asp-prerender-module 和 asp-prerender-data 属性。它们与基于 Node.js 的 Express 服务器通信以获取呈现的 HTML。此后,提供给浏览器的 HTML 将通过操作“水合”。

    【讨论】:

    • IMO 一个混乱的解决方案,这可能是 aspnet 核心团队也放弃了这个的原因。分离项目很麻烦,但更干净。不过,搞清楚它做得很好!
    【解决方案3】:

    Reactjs 正在开发服务器组件,以将部分呈现的 UI 以 JSON 数据的形式流式传输到客户端。 https://github.com/reactjs/rfcs/blob/2b3ab544f46f74b9035d7768c143dc2efbacedb6/text/0000-server-components.md

    我认为未来集成服务器组件,它需要一个原生 NodeJS 进程来处理服务器渲染。

    【讨论】:

      【解决方案4】:

      您可以使用新库从 .net 调用 JS,即

      https://github.com/JeringTech/Javascript.NodeJS

      您可以在 .net 上使用 SSR 与此处描述的上述库 Razzle:

      https://dev.to/pruttned/integrating-react-into-asp-net-core-using-razzle-with-all-the-goodies-like-ssr-routing-code-splitting-and-hmr-part-1-2-34g8

      但在撰写本文时,我发现没有关于如何部署此类应用程序的信息。

      【讨论】:

      • 正在努力解决这个问题... 本教程跳过了重要信息,例如要安装哪些软件包以及将代码放在哪里。你的经历如何?你能最终部署它吗?
      • 是的,我做到了。这现在可以在生产中使用。问我具体问题,我会尽力回复;-)
      • 我有很多最基础的^^。这是我最紧迫的一个。我使用示例项目和我们的页面获得了一些基本的 SSR Razzle,但它没有显示主题。主题数据存储在 localStorage 中,所以 localStorage 不能通过 SSR 获得吗?
      • ofc 不是。唯一的选择是拥有一个非 httponly cookie
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-11-05
      • 2020-06-29
      • 2019-10-05
      • 1970-01-01
      • 2015-05-07
      • 2020-10-17
      • 2018-01-30
      相关资源
      最近更新 更多