+layout.svelte.ts 和 +page.server.ts 执行两次。在这些情况下没有可用的 cookie。为什么使用 sveltekit?

问题描述 投票:0回答:1

使用默认的 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。为什么会发生这种情况以及如何解决它?

cookies svelte server-side-rendering sveltekit
1个回答
0
投票

我发现这个问题的原因与 VS-CODE 扩展“Console Ninja”有关 - https://marketplace.visualstudio.com/items?itemName=WallabyJs.console-ninja.

它似乎在其侧面做了某种负载,镜像点击。不确定具体细节,但这就是原因。

© www.soinside.com 2019 - 2024. All rights reserved.