javascript - formulär element array nycklar i node och express
Trots mina största ansträngningar sitter jag fast på att få array-nycklarna för formulärelement som skickas till NodeJS och Express och Handlebars.
Mina formelement ser ut så här:
{{#each block}}
<input type='text' name='block_payout[{{id}}]' />
{{/each}
Detta resulterar i följande markup i webbläsaren:
<input type='text' name='block_payout[14]' />
<input type='text' name='block_payout[15]' />
<input type='text' name='block_payout[16]' />
I PHP skulle detta resultera i en array som ett element i $_POST-arrayen:
$_POST [
block_payout [
14 => value1
15 => value2
16 => value3
]
]
Men egenskapen req.body i Node/Express tar bort dessa nycklar och skapar en indexerad array:
req.body [
block_payout [
0 => value1
1 => value2
2 => value3
]
]
Eftersom jag vill använda nyckeln för att koppla de inskickade värdena till något annat är detta ett stort problem för mig. Vet någon hur jag kan få de inskickade formuläruppgifterna med rätt nycklar??
Svar #1
Det verkar som att kroppstolkaren använder en array (som måste börja vid index 0) när den endast ser numeriska nycklar, och ett objekt när det finns minst en nyckel som inte är numerisk. Med det i åtanke kan du prova en av följande metoder:
Använd ett dolt formulärfält för att tvinga användningen av ett objekt istället för en array. Exempel:
<input type='hidden' name='block_payout[null]' /> <input type='text' name='block_payout[14]' /> ...Resultat i följande kropp:
{ block_payout: { '14': 'test1', '15': 'test2', '16': 'test3', null: '' } }Prefixa dina nycklar med ett icke-numeriskt tecken för att tvinga objektmappningen. Exempel:
<input type='text' name='block_payout[i14]' /> ...Resultat i följande kropp:
{ block_payout: { i14: 'test1', i15: 'test2', i16: 'test3' } }
