如何将道具传递给 SvelteKit 端点

How to pass props to a SvelteKit endpoint

我试图将 props 传递给 SvelteKit 端点异步函数,但没有成功。我正在使用商店传递 value,但由于我不明白的原因,当我尝试在函数中获取它时 value 未定义.

谁能看出我做错了什么,访问存储值或者是否有更好的方法将 value 传递给函数?谢谢!埃里克

index.svelte

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

  async function handleClick() {
    $sampleData = {value: "Fancy"};
    const result = await (await fetch(`/apis/ping`)).json();
    console.log("result", result);
  }
</script>


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

import { sampleData } from "~/data/sample";
import { get as getDoc } from "svelte/store";


export async function get(): Promise<{ body: any }> {

  const _sampleData = getDoc(sampleData);
  const value = _sampleData.value;
  console.log("value", value);  

  // const value = "Fancy";

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

  console.log("result", result);

  return {
    body: result,
  };
}

存储不会在服务器和客户端之间共享,因此端点中的存储仍将是它的初始值(未定义 在您的情况下)

您必须将前端(在浏览器上执行的内容)和后端或端点(在服务器上执行的内容)视为完全独立的东西。

也就是说,您应该将参数与提取一起传递,无论是在正文中还是作为查询参数。

体内

// in the client
fetch('/apis/ping', {
  body: JSON.stringify({ value: "Fancy" }),
  headers: {
    'Content-Type': 'application/json'
  }
})
// in the endpoint
export async function get({ body }) {
  const sampleData = body;
}

作为查询参数

// in the client
fetch('/apis/ping/?value=Fancy')
// in the endpoint
export async function get({ query }) {
  const sampleData = query.get('value')
}

以下是最终对我有用的东西:

index.svelte

<script lang="ts">
  const value = "Fancy";
  async function handleClick() {
    let response = await(await fetch(`/apis/ping/?value=${value}`)).json();
    console.log("response", response);
  }
</script>


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

ping.ts

export async function get({ query }) {
  const value = query.get("value");
  const result = await (await fetch(`https://my-server/app/ping?value=${value}`)).json();

  return {
    body: result,
  };
}

不确定为什么需要包装额外的等待并强制转换为 json