如何使用Express从具有命名输入的表单收集数据(已经使用bodyParser / express.json)

时间:2019-06-25 09:31:59

标签: express

表单提交到达了我的路由器,但没有数据。

已解决:将express.json()中间件替换为express.urlencoded()。请参阅我对“为什么”的回答。

(隐喻:该表格是一辆公共汽车,然后按下“提交”按钮正在一个公共汽车站收集乘客,然后下车到服务器。这辆公共汽车将门关在那个可能是乘客的脸上,乘客在后面奔跑,乞求总线停止,但总线继续并到达服务器为空的服务器,我需要帮助来替换此功能不佳的总线驱动程序。 )

我正在使用Express v4.17.00和body-parser v1.19.00(我知道它是可选的)。

HTML修复尝试:

  • [x]输入被命名
  • [x]值存在
  • [x]从`type =“ hidden”切换为type =“ text”并返回
  • [x]在按钮[type =“ submit”]和输入[type =“ submit”]之间切换
  • [x]从输入中删除data-fhqwhgads13(Vue值)
  • [x]将更基本的价值传递给价值
  • [x]使用Mozilla的表单示例代替我自己的表单(为什么我怀疑自己搞砸了Express)

快速修复尝试:

  • [x]在bodyParser.json()和express.json()之间切换
  • [x]使用bodyParser.text()、. raw()
  • [x]打印整个需求,以查看身体是否在其他地方。

使用上述修复程序,console.log(req.body)始终显示{}。我在MRE中使用MDN的示例,因此我认为Express缺少一些功能。

Here's my MRE repo

我希望数据进入我的/ store-schedule发布路线,并将数据作为req对象的一部分,并且我应该能够使用它。

无论使用哪种形式的输入,console.log(req.body)都会给我{}。没有错误消息。

1 个答案:

答案 0 :(得分:0)

我猜想表单是通过将数据编码到随邮寄请求发送的数据包主体中而起作用的。我猜这就是URL encoded所指的。这与JSON请求不同。我在传输和请求JSON方面经验很少。我只知道它与JSON请求/响应不同。

因此,将express.json()切换为express.urlencoded()可以通过服务器的/store-schedule路由获得我的数据。

// app.use(express.json()); Doesn't work.
app.use(express.urlencoded()); // Works