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

时间:2019-04-16 18:43:06

标签: javascript node.js express body-parser

我正在尝试访问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的另一个文件

3 个答案:

答案 0 :(得分:0)

您要告诉bodyParser解析正文,就好像它是JSON。但是,标准的<form>不会以JSON的形式提交数据,而是以application/x-www-form-urlencoded的形式提交数据。

要在您的快速应用中阅读该信息,您将需要以下内容:

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(因此具有完全相同的synax),但是在您的应用中看起来可能更整洁。

答案 1 :(得分:-1)

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

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

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

答案 2 :(得分:-1)

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

使用HTML处理表单时,您将具有一个表单标签,但是表单内部的输入,文本区域等将需要 name 属性,以便正确构建有效负载。

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

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