Weboldal keresés

javascript - űrlapelem tömb kulcsok Node-ban és Express-ben


A legjobb erőfeszítésem ellenére is elakadtam abban, hogy megszerezzem a form elemekhez tartozó tömbkulcsokat, amelyeket a NodeJS-nek, az Expressnek és a Handlebarsnek küldtek.

Az űrlapelemeim így néznek ki:

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

Ennek eredményeként a következő jelölés jelenik meg a böngészőben:

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

PHP-ben ez egy tömböt eredményezne a $_POST tömb egyik elemeként:

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

Azonban a Node/Express req.body tulajdonsága eltávolítja ezeket a kulcsokat, és egy indexelt tömböt hoz létre:

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

Mivel azt szeretném, hogy a kulcs segítségével a beküldött értékeket valami máshoz kössem, ez nagy problémát jelent számomra. Tudja valaki, hogyan kaphatom meg a beküldött űrlapadatokat a helyes kulcsokkal??

Válasz #1

Úgy tűnik, hogy a body parser tömböt használ (amelynek 0 indexnél kell kezdődnie), amikor csak numerikus kulcsokat lát, és objektumot, amikor van legalább egy nem numerikus kulcs. Ezt szem előtt tartva kipróbálhatja a következő módszerek egyikét:

  1. Használjon rejtett űrlapelemet annak érdekében, hogy az objektum használatát kényszerítse a tömb helyett. Példa:

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

    Eredmények a következő törzsben:

    { block_payout: { '14': 'test1', '15': 'test2', '16': 'test3', null: '' } }
    
  2. Előtagként használj nem numerikus karaktert a kulcsaidnál az objektumtérkép kényszerítéséhez. Példa:

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

    Az alábbi testben szerepel az eredmény:

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