Ricerca nel sito web

javascript - chiavi dell'array degli elementi del modulo in node ed express


Nonostante i miei migliori sforzi, sono bloccato nel cercare di ottenere le chiavi dell'array per gli elementi del modulo inviati a NodeJS, Express e Handlebars.

I miei elementi del modulo sembrano così:

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

Questo si traduce nel seguente markup nel browser:

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

In PHP questo risulterebbe in un array come elemento dell'array $_POST:

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

Tuttavia, la proprietà req.body in Node/Express rimuove queste chiavi e crea un array indicizzato:

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

Dal momento che voglio usare la chiave per collegare i valori inviati a qualcos'altro, questo è un grosso problema per me. Qualcuno sa come posso ottenere i dati del modulo inviati con le chiavi corrette??

Risposta n. 1

Sembra che il parser del corpo utilizzi un array (che deve iniziare dall'indice 0) quando vede solo chiavi numeriche, e un oggetto quando c'è almeno una chiave non numerica. Tenendo questo in mente, potresti provare uno dei seguenti metodi:

  1. Usa un input di modulo nascosto per forzare l'uso di un oggetto invece di un array. Esempio:

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

    Risultati nel corpo seguente:

    { block_payout: { '14': 'test1', '15': 'test2', '16': 'test3', null: '' } }
    
  2. Prefissa le tue chiavi con un carattere non numerico per forzare la mappatura dell'oggetto. Esempio:

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

    Risultati nel corpo seguente:

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