Sveltekit 无法从 POST 表单数据读取数据

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

只需在 Sveltekit (3.44) 中尝试以下操作,但控制台始终输出:

Got data FormData {}

请求很简单(通过邮递员提出):

curl --request POST \
  --url http://localhost:3000/todos.json \
  --header 'Content-Type: multipart/form-data; boundary=---011000010111000001101001' \
  --form test=hello

代码: src/routes/todos/index.json.ts

export const post: RequestHandler = async (request) => {
    const data = await request.request.formData();
    console.log('Got data', data);
    return {
        status: 200,
        body: 'text'
    }
}

除了解构和清理这段代码之外 - 为什么 formData 是空的?

NB 当将数据线设置为等待 request.request.text() 时,我收到(这表明我正在接收数据):

Got data --X-INSOMNIA-BOUNDARY
Content-Disposition: form-data; name="test"

hello
--X-INSOMNIA-BOUNDARY--
svelte sveltekit
1个回答
4
投票

这是一个已知的:https://github.com/sveltejs/kit/issues/4198这不是一个错误,只是很难记录表单数据并利用它。按照链接中的建议,如果您确实希望将其记录在控制台中,请使用以下命令:

const body = await event.request.formData();

// to get everything
console.log(...body); // ["name", "Rich Harris"] ["hobbies", "svelte"], ["hobbies", "journalism"]

// if you know you don't have duplicates
console.log(Object.fromEntries(body)); // { name: "Rich Harris", hobbies: "journalism" }

我在使用

await request.json()
时没有遇到任何问题,除了当我必须实现文件上传到 API 时。这让我非常头疼,我总是最终使用 S3 存储桶,或者使用 Python 或 Express.js 为此创建一个特殊的 API。

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