隐藏/禁用字段从req.body消失(Express JS BodyParser)

我一直无法find这个问题的答案。 当使用NodeJS,Express和Express Bodyparser(以及我的MEAN堆栈的其余部分)时,遇到隐藏和禁用字段的问题:在提交表单时,它们不会显示在req.body对象中。

如果我理解正确的话,express的bodyparser方面实际上是从另外一个项目中拿走的。 无论如何,我还没有真正弄清楚为什么这些领域被删除或如何阻止这种情况发生。 我怀疑这可能与方法重叠有关,但是启用/禁用这个对于所讨论的字段没有影响。

所以…对于我自己和未来的Google员工来说:这里发生了什么?

下面是一些代码,请求: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") 

performance:

 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 } 

这与Express无关。 表单提交时,只有成功的控件才被序列化并由浏览器发送。

HTML规范定义了什么使控件成功。

成功的控制是“有效”的提交。 每个成功的控件都将其控件名称与其当前值配对,作为提交的表单数据集的一部分。 必须在FORM元素中定义一个成功的控件,并且必须有一个控件名称。

然而:

  • 被禁用的控件不能成功。
  • 如果表单包含多个提交button,则只有激活的提交button成功。
  • 所有“打开”checkbox可能会成功。
  • 对于共享相同名称属性值的单选button,只有“开”单选button可能会成功。
  • 对于菜单,控件名称由SELECT元素提供,值由OPTION元素提供。 只有选定的选项可能会成功。 如果未select任何选项,则控件不成功,并且在提交表单时,名称和任何值都不会提交给服务器。
  • 文件select的当前值是一个或多个文件名的列表。 提交表格后,每个文件的内容都与表格数据的其余部分一起提交。 文件内容根据表单的内容types打包。
  • 对象控件的当前值由对象的实现决定。

如果控件在提交表单时没有当前值,则不需要用户代理将其视为成功的控件。

此外,用户代理不应该考虑以下控制成功:

  • 重置button。
  • 其声明属性已设置的OBJECT元素。

由于样式表设置而未呈现的隐藏控件和控件可能仍然是成功的。

你的问题实际上是Angular。 显然 ,它并没有设置隐藏input的value