gpt4 book ai didi

javascript - Node.js:提交表单时接收空正文

转载 作者:太空宇宙 更新时间:2023-11-03 22:34:37 24 4
gpt4 key购买 nike

我知道这里已经有人问了很多类似的问题,但我仍然无法解决我的问题。我真的不明白发生了什么事。我正在尝试通过 post 请求从表单发送数据,但始终收到空正文。表单的 Jade 代码如下所示:(编辑:添加了 enctype)

    form(enctype="application/json" action="/test" method="post" name="login")
table
tr
th
label(for="username") Username
td
input(type="text" name="username" placeholder="username")
tr
th
label(for="password") Password
td
input(type="password" name="password" placeholder="password")
tr
tr
th
td
input(type="submit" value="Login")

生成以下 HTML 代码(编辑:添加 HTML 代码):

<form enctype="application/json" action="/test" method="post" name="login">
<table>
<tr>
<th>
<label for="username">Username</label>
</th>
<td>
<input type="text" name="username" placeholder="username">
</td>
</tr>
<tr>
<th>
<label for="password">Password</label>
</th>
<td>
<input type="password" name="password" placeholder="password">
</td>
</tr>
<tr></tr>
<tr>
<th></th>
<td>
<input type="submit" value="Login">
</td>
</tr>
</table>
</form>

所以我没有忘记 name 属性。

这就是我处理请求的方式:

router.post('/test', function(req, res) {
console.log('body:', req.body);
res.render('login', {title: 'HK Test'});
});

打印body {}。所以我确信请求已收到。

我也在使用 bodyparser:

var bodyParser = require('body-parser');
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());`

但是,当我使用curl时: curl -H "Content-Type: application/json"-d '{"username":"xyz","password":"xyz"}' http://localhost:4000/login,主体包含用户名和对象。我从另一个工作项目复制了 Jade 代码,所以我真的不明白我做错了什么。

有人知道这可能是什么原因吗?

最佳答案

要在提交时将表单数据序列化为 JSON,您必须将此属性添加到表单中:

enctype="application/json"

否则,如果没有 JS 的帮助,您的表单数据将不会被封装为用于 POST 请求的 JSON。

进一步阅读:

W3C JSON form submission

关于javascript - Node.js:提交表单时接收空正文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31396360/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com