我正在开发一个基于 SvelteKit 的应用程序。在服务器启动时,无论是在开发服务器启动、Node.js 适配器启动时,我想执行一些诊断命令。此类操作的一个示例是对后端服务器执行 ping 操作,如果后端无法访问,则会提前失败。这主要是服务器端渲染的一个问题,但如果很容易,我也想将其应用于静态部署。
在此类代码中放置的最佳挂钩是什么?
另外,什么是优雅地中止应用程序启动并显示错误消息的方法?
至此,官方似乎终于给出了答案:
\nhttps://kit.svelte.dev/docs/hooks
\n\n\n挂钩
\n[...]
\n有两个钩子文件,都是可选的:
\n\n
\n- src/hooks.server.js \xe2\x80\x94 你的应用程序的服务器钩子
\n- src/hooks.client.js \xe2\x80\x94 你的应用程序的客户端钩子
\n这些模块中的代码将在应用程序启动时运行,这使得它们对于初始化数据库客户端等非常有用。
\n[...]
\n
所以是的,只需将您的代码放入 hook.js 文件之一(顶层,而不是函数中),它就会在启动时运行。
\n编辑:正如 leumasme 所尝试的那样(https://github.com/sveltejs/kit/issues/927#issuecomment-1349637401),但这仅适用于发布版本。在开发模式下,代码仅在第一个请求时执行。所以请记住这一点。
\n小智 6
接受的答案没有回答问题。服务器挂钩针对每个请求或每个错误运行一次。它们与服务器生命周期无关,并且不是初始化数据库或预加载站点范围数据等的合适位置。现在正在寻找一种方法来做到这一点。
https://kit.svelte.dev/docs/hooks
我的猜测是,答案就在所使用的一个或多个适配器中的某个地方。
由 Svelte 的 Discord 频道的 Svelte 大使 {} pablopang 解决。引用:
if you run the code inside the module of hooks.server.ts
it will be exected only once
what i mean is that you need to run right inside hooks.server.ts
not in the exported handle function
obviosuly be aware of the fact that if you deploy on serverless
every new lambda spin up will run that code
but that should be good since it's like if you just spun up the server
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6233 次 |
| 最近记录: |