在Svelte应用程序中初始化数据库的最佳位置是哪里



所以我有一个Svelte应用程序,它使用来自better-sqlite3数据库的数据。该应用程序从数据库中提取数据并将其存储在Svelte商店中。该应用程序还会初始化数据库,并在表不存在的情况下创建表。我正在努力找出进行数据库初始化的最佳位置。目前,它处于我的Store.js的开头,因为这就是它的工作原理,但感觉不对,我想知道我是否会给自己制造麻烦。

下面的例子是一个REPL的链接,它近似于在没有数据库的情况下发生的事情。

https://svelte.dev/repl/54e5787a37ff47bb9f72476dab67d3b1?version=3.35.0

从体系结构的角度来看,您不应该在客户端中进行数据库操作和初始化,因为这会暴露出高安全性问题。为此,您应该使用一个单独的后端(例如NodeJS服务器(,通过Rest提供数据。该服务器可以在启动时初始化您的数据库。

这个答案有点晚了,但我希望它能有所帮助。Sveltekit建议将仅限服务器的操作(如访问数据库或向后端服务器发出请求(存储在每个路由的特殊+page.server.js/.ts文件中。

此外,为了初始化数据库,您可以在$lib/server目录中创建一个db.ts文件。这些文件导出的文件和函数将永远不会发送到客户端。如果你试图以不安全的方式访问它们,即将它们暴露给客户端,那么Svelte会抱怨,不会编译。有关更多详细信息,请参阅:仅服务器模块

然后,您可以在各个路由中使用DB,方法是从+page.server.ts文件中调用它。这样,数据库和任何其他关键信息都不会发送到客户端。

我是这样使用的:

  • 数据库初始化和设置(如表创建等(在$lib/server目录内的db.ts文件中完成
  • 我在$lib/server/schema.ts中定义我的模式
  • 我不直接从页面路由访问数据库实例。相反,我从$lib/server目录导出函数,这些函数在+page.server.ts文件中使用

我希望这能有所帮助。另外,在$lib/server中创建一个单独的db目录,以更好地组织文件。

最新更新