无法访问 post 请求中的数据。表达

Cant access the data in a post request. Express

我正在尝试访问 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);

});

如果用户在文本区域中输入 "John",我希望页面刷新并且名称 John 出现在终端中。

我计划将该数据导出到与我的 mongodb

连接的另一个文件

您是在告诉 bodyParser 像 JSON 一样解析正文。但是,标准 <form> 将不会以 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.


内置替代方案

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

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

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

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

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

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

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

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

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

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