我知道这里有很多类似的问题,但我仍然无法解决我的问题。我真的不知道发生了什么事。
我试图通过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代码,所以我真的不明白我做错了什么。
有没有人知道这可能是什么原因?
答案 0 :(得分:1)
要在提交时将表单数据序列化为JSON,您必须将此属性添加到表单中:
enctype="application/json"
否则,在没有JS的任何帮助的情况下,您的表单数据将不会被封装为POST请求的JSON。
进一步阅读:
答案 1 :(得分:-1)
请求不是curl请求中的/ test
http://localhost:4000/login
将其更改为
http://localhost:4000/test
你忘记了逗号
form(action="/test", method="post", name="login")