當我使用 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' } ]
}
uj5u.com熱心網友回復:
有些庫可以或多或少地自動執行這樣的轉換。一些在欄位名稱中使用約定將資料決議為陣列和嵌套結構,另一些還使用模式進行型別轉換或驗證。例如,要實作這樣的物件陣列,可以這樣設定名稱:
<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,這樣您就可以以固定結構發送并接收確切的結構。當然,這需要自己系結/讀取表單值。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/487220.html
上一篇:為預測任務生成子集資料的滑動視窗
