只需在 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--
这是一个已知的: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。