无法访问 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 的请求负载中显示一个新的 属性,其中包含提交表单时文本区域中的内容。
我正在尝试访问 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 的请求负载中显示一个新的 属性,其中包含提交表单时文本区域中的内容。