簡體   English   中英

隱藏/禁用字段從req.body消失(Express JS bodyParser)

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

我一直無法找到這個問題的答案。 當使用NodeJS,Express和Express Bodyparser - 以及我的MEAN堆棧的其余部分 - 我遇到了隱藏和禁用字段的問題:提交表單時它們不會出現在req.body對象中。

如果我理解正確,快遞的bodyparser方面實際上是從另一個項目中獲取的。 無論如何,我還沒有真正弄清楚為什么要刪除這些字段或如何阻止這種情況發生。 我懷疑它可能與methodoverride有關,但是啟用/禁用它對相關字段沒有影響。

那么......對於我自己和未來的googler's:這里發生了什么?

根據要求,這里有一些代碼: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")

表達:

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元素中定義成功的控件,並且必須具有控件名稱。

然而:

  • 已禁用的控件無法成功。
  • 如果表單包含多個提交按鈕,則只有激活的提交按鈕成功。
  • 所有“打開”復選框都可能成功。
  • 對於共享相同name屬性值的單選按鈕,只有“on”單選按鈕可能成功。
  • 對於菜單,控件名稱由SELECT元素提供,值由OPTION元素提供。 只有選定的選項可能會成功。 如果未選擇任何選項,則控件不會成功,並且在提交表單時,不會將名稱或任何值提交給服務器。
  • 文件選擇的當前值是一個或多個文件名的列表。 提交表單后,每個文件的內容將與其余表單數據一起提交。 文件內容根據表單的內容類型打包。
  • 對象控件的當前值由對象的實現決定。

如果控件在提交表單時沒有當前值,則用戶代理不需要將其視為成功控件。

此外,用戶代理不應該認為以下控件成功:

  • 重置按鈕。
  • 已設置declare屬性的OBJECT元素。

由於樣式表設置而未呈現的隱藏控件和控件仍可能成功。

你的問題實際上是Angular。 顯然 ,它沒有設置隱藏輸入的value

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM