Los campos ocultos / deshabilitados desaparecen de req.body (Express JS bodyParser)

No he podido encontrar la respuesta a esta pregunta. Cuando utilizo NodeJS, Express y Express Bodyparser, y el rest de mi stack MEAN, me encuentro con un problema con los campos ocultos y deshabilitados: no aparecen en el objeto req.body al enviar un formulario.

Si lo entiendo correctamente, el aspecto bodyparser de Express en realidad está tomado de otro proyecto. En cualquier caso, realmente no he podido averiguar por qué se eliminan estos campos o cómo evitar que esto suceda. Sospecho que podría tener algo que ver con methodoverride, pero habilitar / deshabilitar esto no tiene ningún efecto en los campos en cuestión.

Así que … para mí y para el futuro Googler: ¿qué está pasando aquí?

Aquí hay un código, según lo solicitado: JADE:

form(action="/admin/users/edit", method="post", ng-submit='registerUser($event)', name='form', novalidate) .row(ng-show="ifweareupdating") label(for="_id") _id: input(type="hidden", id="_id", name="_id", ng-model="newUser._id") input(type="text", id="_notHiddenId', name="_notHiddenId", ng-model="newUser._id") 

EXPRIMIR:

 app.post("/admin/users/edit", pass.ensureAdmin, userRoutes.editUserPost); 

userRoutes:

 exports.userRoutes.editUserPost = function(req,res,next) { console.log(req.body._id) // logs undefined console.log(req.body._notHiddenId) // logs actual id } 

Esto no tiene nada que ver con Express. Solo los controles exitosos son serializados y enviados por el navegador cuando se envía un formulario.

La especificación HTML define qué hace que un control sea exitoso.

Un control exitoso es “válido” para el envío. Cada control exitoso tiene su nombre de control emparejado con su valor actual como parte del conjunto de datos del formulario enviado. Un control exitoso debe definirse dentro de un elemento FORM y debe tener un nombre de control.

Sin embargo:

  • Los controles que están deshabilitados no pueden tener éxito.
  • Si un formulario contiene más de un botón de envío, solo el botón de envío activado tendrá éxito.
  • Todas las casillas de verificación “en” pueden tener éxito.
  • Para los botones de opción que comparten el mismo valor del atributo de nombre, solo el botón de opción “en” puede tener éxito.
  • Para los menús, el nombre de control lo proporciona un elemento SELECT y los valores son proporcionados por los elementos OPTION. Solo las opciones seleccionadas pueden ser exitosas. Cuando no se selecciona ninguna opción, el control no tiene éxito y ni el nombre ni los valores se envían al servidor cuando se envía el formulario.
  • El valor actual de una selección de archivos es una lista de uno o más nombres de archivos. Una vez enviado el formulario, el contenido de cada archivo se envía junto con el rest de los datos del formulario. El contenido del archivo se empaqueta según el tipo de contenido del formulario.
  • El valor actual de un control de objeto está determinado por la implementación del objeto.

Si un control no tiene un valor actual cuando se envía el formulario, no es necesario que los agentes de usuario lo traten como un control exitoso.

Además, los agentes de usuario no deberían considerar exitosos los siguientes controles:

  • Botones de reinicio.
  • Elementos OBJECT cuyo atributo declarar ha sido establecido.

Los controles ocultos y los controles que no se procesan debido a la configuración de la hoja de estilo todavía pueden tener éxito.

Su problema es en realidad angular. Al parecer , no establece el value de las entradas ocultas.