【问题标题】:Cant access the data in a post request. Express无法访问发布请求中的数据。表达
【发布时间】:2019-04-16 18:43:06
【问题描述】:

我正在尝试访问 POST 请求中的数据,但是当我使用 console.log(req.body) 时,我得到的是一个空的 {}。

我觉得我的错误出现在标记中?

这是相关的客户端标记

<div id='create' class="card">
  <form method = 'post' action='/'>
    <textarea placeholder="Enter your name"></textarea><br>
    <button type="submit" class="btn btn-primary">Submit</button>
  </form>
</div>

相关后端代码

app.use(bodyParser.json());

app.post('/',(req, res)=>{
    console.log(req.body);

});

如果用户在 textarea 中输入“John”,我希望刷新页面并让 John 出现在终端中。

我打算将该数据导出到连接到我的 mongodb 的另一个文件

【问题讨论】:

  • 您的作业中有一个空格:method = 'post'。我不确定这是否允许......
  • textarea 需要一个名称才能将其分配为有效负载的一部分。试一试。
  • @Fallenreaper 非常感谢你
  • @Heyrio 如果是这样的话,我会添加一个答案。

标签: javascript node.js express body-parser


【解决方案1】:

您是在告诉 bodyParser 像解析 JSON 一样解析正文。但是,标准的&lt;form&gt; 将提交数据不是JSON,而是application/x-www-form-urlencoded

要在您的 express 应用中阅读该内容,您需要这样的内容:

app.use(bodyParser.urlencoded({extended: false}));

同时允许 JSON 和表单数据

如果你想同时允许 URL 编码和 JSON 数据,你可以结合这两种方法:

app.use(bodyParser.urlencoded({extended: false}))
app.use(bodyParser.json())

一个完整的例子可以是found here


内置替代方案

请注意:如果您使用的是 Express 的 recent version,您还可以将 body-parser 模块换成内置替代品:

app.use(express.urlencoded({extended: false}))
app.use(express.json())

这仍然在下面使用body-parser(因此具有完全相同的语法),但在您的应用中可能看起来更整洁。

【讨论】:

  • body-parser deprecated undefined extended: 提供扩展选项 app.js:9:20 我已经添加了它,当我这样做并运行它时,我会在终端中得到它。当我点击提交时,我还想在客户端页面上添加它,但页面会不断加载并说等待本地主机。
【解决方案2】:

查看控制台日志语句时,您正在转储作为空对象的资源。鉴于这些信息,我查看了您的 HTML。

在处理 HTML 中的表单时,您将拥有一个表单标签,但表单内的输入、文本区域等需要一个 name 属性才能正确构建有效负载。

<textarea name="test"></textarea>

将在请求负载中显示一个名为 test 的新属性,其中包含提交表单时文本区域中的内容。

【讨论】:

    【解决方案3】:

    这个问题已经通过两件事的结合解决了。

    1.) 我需要添加 app.use(bodyParser.urlencoded()) 因为它不是由表单发送的,就好像它是 JSON 数据一样。

    2.) 我需要为文本区域添加一个名称。

    【讨论】:

      猜你喜欢
      • 2019-10-11
      • 1970-01-01
      • 1970-01-01
      • 2019-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-26
      • 1970-01-01
      相关资源
      最近更新 更多