You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何向SvelteKit endpoint传递props?store取值undefined问题求助

核心问题原因

你遇到的问题本质是客户端运行环境和服务端运行环境隔离:

  • 你在index.svelte里修改的store是运行在用户浏览器的客户端状态,仅在当前用户的浏览器上下文生效
  • /apis/ping对应的ping.ts是SvelteKit的服务端端点,代码运行在服务器上,和用户浏览器的客户端store完全不互通,所以你在服务端拿客户端修改的store值,必然返回undefined

你操作store的语法本身没有问题,只是store本身就是设计用来做客户端跨组件状态共享的,不具备跨客户端、服务端传值的能力。

可行的解决方案

直接把需要传递的value放在请求参数/请求体中传给服务端端点即可,实现成本最低也符合前后端交互的规范:

方案1:通过GET请求的query参数传递(适合非敏感短参数)

修改index.svelte中的请求逻辑,把值拼接到请求URL中:

<script lang="ts">
  import { sampleData } from "~/data/sample";

  async function handleClick() {
    const sendValue = "Fancy";
    $sampleData = {value: sendValue};
    // 对参数做URI编码避免特殊字符出错
    const result = await (await fetch(`/apis/ping?value=${encodeURIComponent(sendValue)}`)).json();
    console.log("result", result);
  }
</script>

<button on:click={handleClick}>Ping</button>

修改ping.ts的逻辑,从请求对象中获取参数:

import type { RequestEvent } from '@sveltejs/kit';

export async function get(event: RequestEvent): Promise<{ body: any }> {
  // 从请求的query参数中读取value
  const value = event.url.searchParams.get('value');
  console.log("value", value);  

  const result = await (
    await fetch(`https://my-server/app/ping?value=${encodeURIComponent(value)}`)
  ).json();

  return {
    body: result,
  };
}

方案2:通过POST请求的请求体传递(适合敏感数据/长参数)

如果value是敏感数据或者内容很长,改用POST请求传递即可,逻辑和上面类似,只是把参数放在请求体中,服务端从event.request.json()里读值。


内容的提问来源于stack exchange,提问作者JarvisWorks

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 11:54:00