当我使用 Sveltekit 的 POST 端点时,我得到一个“平面”对象作为输出。我怎样才能得到一个“结构化”对象呢?
让我们假设以下代码:
index.svelte
<div class="container">
<form method="post">
<label for="firstname">Firstname</label>
<input type="text" name="firstname" />
<label for="lastname">Lastname</label>
<input type="text" name="lastname" />
<label for="dog">Dog 1</label>
<input type="text" name="dog" />
<label for="dog">Dog 2</label>
<input type="text" name="dog" />
<!-- ... -->
<button>Save</button>
</form>
</div>
index.js
export async function post({request}){
const data = Object.fromEntries(await request.formData());
console.log(data);
return{}
}
输出(我称之为“平面”对象)
{ firstname: 'foo', lastname: 'bar', dog: 'teckel', dog: 'labrador' }
而不是那个输出,我应该如何继续在我的 index.js 中获得以下输出
预期输出:
{
firstname: 'foo',
lastname: 'bar',
dogs: [ { dog: 'teckel' }, { dog: 'labrador' } ]
}
有些库可以或多或少地自动执行这样的转换。一些在字段名称中使用约定将数据解析为数组和嵌套结构,另一些还使用模式进行类型转换或验证。例如,要实现这样的对象数组,可以这样设置名称:
<label for="dog">Dog 1</label>
<input type="text" name="dogs[][dog]" />
<label for="dog">Dog 2</label>
<input type="text" name="dogs[][dog]" />
表示该[]
字段是数组的一部分,[dog]
表示dog
在元素上设置了一个调用的属性(.dog
这也是合理的)。
Object.fromEntries
因此,您必须自己解析数据或找到为您执行此操作的库,而不是调用。(请注意,StackOverflow不是库推荐的地方。)
就个人而言,我会避免同步表单发布并异步发送 JSON,这样您就可以以固定结构发送并接收确切的结构。当然,这需要自己绑定/读取表单值。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句