Sveltekit:跨页面共享服务对象(例如配置的 http 客户端)
Sveltekit: Sharing service objects (e.g. configured http client) across pages
我正在将我的应用程序从 Svelte SPA(原始)移动到 Sveltekit 多页应用程序(新)。
在原始应用程序中,我在顶部配置了一个 http 客户端,并使用以下方式将其置于上下文中:
setContext(HTTP_CLIENT, httpClient)
现在整个应用程序都可以使用
获取该 http 客户端
const httpClient = getContext(HTTP_CLIENT)
我这样做是因为我的应用程序可以使用调试参数启动,而不是打开 http 请求日志记录。
我不清楚如何在 Sveltekit 中做类似的事情,因为页面似乎不共享上下文。
我试过像这样在会话中粘贴 http 客户端:
import { session } from "$app/stores";
$session.httpClient = httpClient
我得到了:
Error: Failed to serialize session data: Cannot stringify arbitrary non-POJOs
所以$session
是要序列化的,好吧。这是否意味着我需要将用户提供的任何调试参数放入 $session
,并且每个页面都需要重新实例化自己的 http 客户端?还是有其他一些惯用的 sveltekit 方法可以做到这一点?
PS 我知道 sveltekit 有它自己的 fetch
所以你可能想说“不要使用你自己的 http 客户端”,但我的应用程序使用许多不同的服务对象(graphql 客户端用于示例)可以在调试(和其他)模式下配置,所以请不要因为我的示例是 http 客户端这一事实而将其归零。
解决此问题的一种方法是向下发送顶部 __layout
文件中的配置,在那里创建 http 客户端并存储在商店中。由于所有页面共享商店,因此客户可以自由使用该商店。
我正在将我的应用程序从 Svelte SPA(原始)移动到 Sveltekit 多页应用程序(新)。
在原始应用程序中,我在顶部配置了一个 http 客户端,并使用以下方式将其置于上下文中:
setContext(HTTP_CLIENT, httpClient)
现在整个应用程序都可以使用
获取该 http 客户端const httpClient = getContext(HTTP_CLIENT)
我这样做是因为我的应用程序可以使用调试参数启动,而不是打开 http 请求日志记录。
我不清楚如何在 Sveltekit 中做类似的事情,因为页面似乎不共享上下文。
我试过像这样在会话中粘贴 http 客户端:
import { session } from "$app/stores";
$session.httpClient = httpClient
我得到了:
Error: Failed to serialize session data: Cannot stringify arbitrary non-POJOs
所以$session
是要序列化的,好吧。这是否意味着我需要将用户提供的任何调试参数放入 $session
,并且每个页面都需要重新实例化自己的 http 客户端?还是有其他一些惯用的 sveltekit 方法可以做到这一点?
PS 我知道 sveltekit 有它自己的 fetch
所以你可能想说“不要使用你自己的 http 客户端”,但我的应用程序使用许多不同的服务对象(graphql 客户端用于示例)可以在调试(和其他)模式下配置,所以请不要因为我的示例是 http 客户端这一事实而将其归零。
解决此问题的一种方法是向下发送顶部 __layout
文件中的配置,在那里创建 http 客户端并存储在商店中。由于所有页面共享商店,因此客户可以自由使用该商店。