使用默认的 Sveltekit(“版本”:“2.5.4”)演示应用程序,我在 +page.server.ts 上有以下内容:
import type { PageServerLoad } from './$types';
export const load: PageServerLoad = async ({locals, url, cookies}) => {
console.log("MAIN SERVER PAGE LOAD --> +page.server.ts: -- COOKIE VALUE: ", cookies.get('DEBUG'));
return {
query: {}
};
};
对于 +layout.server.ts 我有以下内容:
import type { LayoutServerLoad } from './$types';
export const load: LayoutServerLoad = async ({ locals, cookies}) => {
console.log("LAYOUT SERVER LOAD --> +layout.server.ts -- ", cookies.get("DEBUG"));
return {
session: {}
};
};
为了测试目的,我在不同的页面上设置了 cookie:
export const load = (({ cookies }) => {
cookies.set('DEBUG', "This is for debugging", {
secure: false,
httpOnly: false,
path: '/'
});
}) satisfies PageServerLoad;
在主+page.svelte我有以下按钮:
async function query(){
let access_token = "SSSLOJGGTFGHKLNOKJVUBI";
const response = await fetch("http://localhost:8000/v1/apples/get-apple/", {
method: 'GET',
headers: {
"Content-Type": "application/json",
"Authorization": `Bearer ${access_token}`,
"Access-Control-Allow-Origin": "*"
},
body: null
});
console.log(await response.json());
}
然后我执行以下顺序: 重新加载主页会触发以下日志:
LAYOUT SERVER LOAD --> +layout.server.ts -- 这是为了调试
主服务器页面加载 --> +page.server.ts: -- COOKIE VALUE: 这是用于调试
这就是我所期望的,但是当我单击触发查询功能的按钮后,会发生以下情况:
LAYOUT SERVER LOAD --> +layout.server.ts -- 这是为了调试
主服务器页面加载 --> +page.server.ts: -- COOKIE VALUE: 这是用于调试
布局服务器负载 --> +layout.server.ts -- 未定义
主服务器页面加载 --> +page.server.ts: -- COOKIE 值:未定义
布局服务器负载 --> +layout.server.ts -- 未定义
主服务器页面加载 --> +page.server.ts: -- COOKIE 值:未定义
如您所见,+layout.server 和 +page.server 被触发两次,并且也没有可用的 cookie。为什么会发生这种情况以及如何解决它?
我发现这个问题的原因与 VS-CODE 扩展“Console Ninja”有关 - https://marketplace.visualstudio.com/items?itemName=WallabyJs.console-ninja.
它似乎在其侧面做了某种负载,镜像点击。不确定具体细节,但这就是原因。