javascript - ključevi niza elemenata obrasca u node i express


Unatoč mojim najboljim pokušajima, zaglavio sam u dobivanju ključeva polja za elemente obrasca koji se šalju na NodeJS, Express i Handlebars.

Moji elementi obrasca izgledaju ovako:

{{#each block}}
<input type='text' name='block_payout[{{id}}]' />
{{/each}

To rezultira sljedećim označavanjem u pregledniku:

<input type='text' name='block_payout[14]' />
<input type='text' name='block_payout[15]' />
<input type='text' name='block_payout[16]' />

U PHP-u bi to rezultiralo poljem kao elementom polja $_POST:

$_POST [
  block_payout [
    14 => value1
    15 => value2
    16 => value3
  ]
]

Međutim, svojstvo req.body u Node/Express uklanja ove ključeve i stvara indeksirani niz:

req.body [
  block_payout [
    0 => value1
    1 => value2
    2 => value3
  ]
]

Budući da želim koristiti ključ za povezivanje poslanih vrijednosti s nečim drugim, ovo je za mene veliki problem. Zna li netko kako mogu dobiti poslane podatke obrasca s točnim ključevima??

Odgovor #1

Čini se da parser tijela koristi niz (koji mora početi od indeksa 0) kada vidi samo numeričke ključeve, a objekt kada postoji barem jedan ključ koji nije numerički. S tim u vezi, možete isprobati jednu od sljedećih metoda:

  1. Koristite skriveni unos obrasca kako biste prisilili korištenje objekta umjesto niza. Primjer:

    <input type='hidden' name='block_payout[null]' />
    <input type='text' name='block_payout[14]' />
    ...
    

    Rezultati u sljedećem tijelu:

    { block_payout: { '14': 'test1', '15': 'test2', '16': 'test3', null: '' } }
    
  2. Prefiksirajte svoje ključeve znakom koji nije broj kako biste prisilili mapiranje objekta. Primjer:

    <input type='text' name='block_payout[i14]' />
    ...
    

    Rezultati u sljedećem tijelu:

    { block_payout: { i14: 'test1', i15: 'test2', i16: 'test3' } }