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

Hidden/Disabled fields disappear from req.body (Express JS bodyParser)

本文关键字:消失 Express JS bodyParser body 字段 req 隐藏      更新时间:2023-09-26

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

如果我理解正确,Express 的 bodyparser 方面实际上是取自另一个项目。 无论如何,我真的无法弄清楚为什么要删除这些字段或如何阻止这种情况发生。 我怀疑它可能与方法覆盖有关,但启用/禁用它对相关字段没有影响。

所以..对于我自己和未来的谷歌员工:这里发生了什么?

下面是一些代码,根据要求:玉:

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")

表达:

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

用户路由:

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 元素中,并且必须具有控件名称。

然而:

  • 禁用的控件无法成功。
  • 如果表单包含多个提交按钮,则只有激活的提交按钮成功。
  • 所有"打开"复选框都可能成功。
  • 对于共享相同 name 属性值的单选按钮,只有"on"单选按钮可能成功。
  • 对于菜单,控件名称由 SELECT 元素提供,值由 OPTION 元素提供。只能选择的选项 成功的。如果未选择任何选项,则控件不 成功,但名称和任何值都不会提交到 提交表单时的服务器。
  • 文件选择的当前值是一个或多个文件名的列表。提交表格后,每个文件的内容是 与其余表单数据一起提交。文件内容是 根据表单的内容类型进行打包。
  • 对象控件的当前值由对象的实现确定。

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

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

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

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

你的问题实际上是棱角分明的。 显然,它没有设置隐藏输入的value