Vyhledávání na webu

javascript - klíče pole formulářových prvků v Node a Express


Navzdory mým nejlepším snahám jsem zaseknutý při získávání klíčů polí pro formulářové prvky odeslané do NodeJS, Express a Handlebars.

Moje formulářové prvky vypadají takto:

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

To vede k následujícímu značkování v prohlížeči:

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

V PHP by to vedlo k tomu, že pole bude prvkem pole $_POST:

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

Nicméně vlastnost req.body v Node/Express tyto klíče odstraní a vytvoří indexované pole:

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

Jelikož chci použít klíč k propojení odeslaných hodnot s něčím jiným, je to pro mě velký problém. Ví někdo, jak mohu získat odeslaná data formuláře s správnými klíči??

Odpověď č. 1

Zdá se, že parser těla používá pole (které musí začínat na indexu 0), když vidí pouze číselné klíče, a objekt, když je alespoň jeden klíč nečíselný. S tímto na paměti můžete vyzkoušet jednu z následujících metod:

  1. Použijte skrytý formulářový vstup k vynucení použití objektu místo pole. Příklad:

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

    Výsledky v následujícím těle:

    { block_payout: { '14': 'test1', '15': 'test2', '16': 'test3', null: '' } }
    
  2. Před klíče přidejte nenumerický znak, aby bylo vynuceno mapování objektu. Příklad:

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

    Výsledky v následujícím těle:

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