我遇到了类似于这个问题和其他几个症状的问题,虽然答案对我没有帮助.我正在尝试通过简单的HTML表单向Node应用程序提交密码,但请求正在保持空白状态.
服务器:
app.use(bodyParser.urlencoded({extended: true}));
router.post('/login', (req, res) => {
console.log(req.body);
console.log(req.headers['content-type']);
});
Run Code Online (Sandbox Code Playgroud)
形成:
<form action="/login" method="post">
<input type="password" id="password">
<button type="submit">Log In</button>
</form>
Run Code Online (Sandbox Code Playgroud)
如果我提交表格,我会得到以下内容:
{} // req.body
'application/x-www-form-urlencoded' // req.headers['content-type']
Run Code Online (Sandbox Code Playgroud)
但是,如果我尝试卷曲端点,我会得到一个非空的req.body
:
$ curl -X POST localhost:5000/login -d 'password=testpw'
// Output
{ password: 'testpw' }
'application/x-www-form-urlencoded'
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
问题出在你的身上
<form action="/login" method="post">
<input type="password" id="password">
<button type="submit">Log In</button>
</form>
Run Code Online (Sandbox Code Playgroud)
你input
没有name
元素
应该
<input name="password" type="password" id="password">
Run Code Online (Sandbox Code Playgroud)
如果您的表单已正确设置(如接受的答案中所示),但您的请求正文在后端仍然为空,您应该检查以确保您的后端正在使用某种body parser。如果您使用的是express.js,修复示例是简单地添加:
const bodyParser = require('body-parser');
app.use(bodyParser.urlencoded({limit: '5000mb', extended: true, parameterLimit: 100000000000}));
Run Code Online (Sandbox Code Playgroud)