Búsqueda de sitios web

javascript - claves de array de elementos de formulario en node y express


A pesar de mis mejores esfuerzos, estoy atascado en obtener las claves del arreglo de los elementos del formulario enviados a NodeJS, Express y Handlebars.

Mis elementos de formulario se ven así:

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

Esto resulta en el siguiente marcado en el navegador:

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

En PHP esto resultaría en un arreglo como un elemento del arreglo $_POST:

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

Sin embargo, la propiedad req.body en Node/Express elimina estas claves y crea un arreglo indexado:

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

Dado que quiero usar la clave para vincular los valores enviados a otra cosa, este es un gran problema para mí. ¿Alguien sabe cómo puedo obtener los datos del formulario enviado con las claves correctas??

Respuesta #1

Parece que el analizador del cuerpo utiliza un arreglo (que debe comenzar en el índice 0) cuando solo ve claves numéricas, y un objeto cuando hay al menos una clave que no es numérica. Con eso en mente, podrías intentar uno de los siguientes métodos:

  1. Usa un campo de formulario oculto para forzar el uso de un objeto en lugar de un arreglo. Ejemplo:

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

    Resultados en el siguiente cuerpo:

    { block_payout: { '14': 'test1', '15': 'test2', '16': 'test3', null: '' } }
    
  2. Prefija tus claves con un carácter no numérico para forzar el mapeo del objeto. Ejemplo:

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

    Resultados en el siguiente cuerpo:

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