我已经在我自己的个人项目中随意使用了SvelteKit一段时间了。我过去也使用过其他框架,如Next.js和Nuxt.js。在我正在编写的代码实际运行的这些框架中工作时,我总是感到困惑。
对于我日常工作中的一些上下文,我使用ASP.NET核心平台创建更传统的web应用程序。
在ASP.NET中,我清楚地知道我编写的代码在哪里运行。我用Razor页面编写前端标记(只是编写html的一种方式,但在其中注入C#表达式)。当浏览器请求从服务器查看页面时,服务器获取页面和它需要的任何数据,从Razor页面标记生成html,并将其发送回浏览器,将其呈现到一个漂亮的网页中--我也可以在同一个应用程序中编写http处理程序,该处理程序可以侦听表单提交并通过ORM与数据库交互。
然而,在JavaScript框架(如SvelteKit、Next.js或Nuxt.js )中,这个过程总是让我感到困惑。我知道每个框架都以某种方式使用各自的组件框架(Svelte、React和Vue)。我还了解到,每个框架都增加了基于文件的路由功能,这样src代码映射中特定位置的文件就可以在浏览器中特定路由。例如,在SvelteKit中,您可以在src/routes/myAmazingPage.svelte上有一个svelte文件,当浏览器浏览到https://wherevertheappishosted.com/myAmazingPage时,该文件会在其中呈现。
然而,这是我的理解变得有点模糊。当您在SvelteKit中的页面之间浏览时,它不会导致浏览器中的页面重新加载。这告诉我,框架正在使用某种类型的客户端路由来处理这种行为,因为页面顶部的url和页面内容会发生变化,而不会导致页面重新加载。也没有向服务器发送任何网络请求来从某个url获取页面,这告诉我,所有数据获取必须在组件挂载上或在其他生命周期挂钩中在JavaScript中完成。
因此,我的问题是,在这种情况下,如果每个页面请求都没有发送http请求(即,当您导航到另一个页面时)到服务器,那么我用SvelteKit编写的代码在哪里真正运行呢?我用SvelteKit编写的所有代码是否都在初始页面加载时编译并发送到浏览器,然后全部在浏览器中运行?包括我编写的代码,以便在生命周期方法(如onMount() )中获取数据。
另外,如果这是真的,那么这些框架是否在后台运行了任何类型的http服务器来处理任何其他web请求?例如,我是否可以用svelte工具包编写一个http处理程序来处理表单提交的post请求,以便将数据保存到数据库中?这就是我在ASP.NET中处理表单提交的方式,我一直在想,在SvelteKit、Next.js或Nuxt.js中是否可以这样做。我过去使用过的唯一替代方法是编写一个用node.js编写的单独的http服务器,并使用它来处理与数据库和其他操作的通信,我将来自SvelteKit应用程序的所有请求发送到该服务器。
对于更有经验的JavaScript框架开发人员来说,这可能是一个明显的问题,但是由于每天都在ASP.NET这样的传统MVC框架中工作,所以这个话题总是让我感到困惑。
发布于 2022-08-05 10:44:52
SvelteKit应用程序可以以很少不同的方式部署到生产中。
Next.js和Nuxt.js各自在Node.js V8虚拟机上用JavaScript编写了自己的web服务器。
https://stackoverflow.com/questions/73248377
复制相似问题