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 客户端并存储在商店中。由于所有页面共享商店,因此客户可以自由使用该商店。