通过HTML表单

时间:2017-01-08 09:32:34

标签: node.js

我遇到类似于this question和其他几个症状的问题,虽然答案对我没有帮助。我试图通过一个简单的HTML表单向Node应用程序提交密码,但请求正文一直空着。

服务器:

app.use(bodyParser.urlencoded({extended: true}));

router.post('/login', (req, res) => {
  console.log(req.body);
  console.log(req.headers['content-type']);
});

形式:

<form action="/login" method="post">
  <input type="password" id="password">
  <button type="submit">Log In</button>
</form>

如果我提交表格,我会得到以下内容:

{} // req.body
'application/x-www-form-urlencoded' // req.headers['content-type']

但是,如果我尝试卷曲端点,我会得到一个非空的req.body

$ curl -X POST localhost:5000/login -d 'password=testpw'

// Output
{ password: 'testpw' }
'application/x-www-form-urlencoded'

我做错了什么?

2 个答案:

答案 0 :(得分:7)

问题出在您的表单中

<form action="/login" method="post">
  <input type="password" id="password">
  <button type="submit">Log In</button>
</form>

您的input没有name元素

应该是

<input name="password" type="password" id="password">

答案 1 :(得分:0)

如果您的表单设置正确,如已接受的答案所示,但您的请求正文在后端仍为空,您应该检查以确保您的后端使用某种正文解析器。如果您使用的是 express.js,一个示例修复是简单地添加:

const bodyParser = require('body-parser');
app.use(bodyParser.urlencoded({limit: '5000mb', extended: true, parameterLimit: 100000000000}));