Req.body = {}请求后

我有这个代码js:

app.use(express.static(__dirname)); app.use(bodyParser.urlencoded({ extended: false })); app.use(bodyParser.json()); // support json encoded bodies app.get('/', function(req, res){ res.sendFile(__dirname+'index.html') }); app.get('/ins.html', function(req, res){ res.sendFile(__dirname+'ins.html') }); app.post('/ins', function(req, res){ console.log(req.body) res.redirect('/') }); 

和这个代码html:

 <form method="post" enctype="multipart/form-data" action="/ins"><p> <strong>INSERISCI LA TUA CAGATA<br></strong> <br><p>Username&nbsp</p> <input type="text" name="username" required><br> <br><p>Password &nbsp</p> <input type="password" name="password" required><br><br><br> <input type="submit" class="mainBtn" id="submit" value="Inserisci Cagata"> <p> </form></h2> 

当我转到页面时,在控制台显示“{}”,我没有访问POSTvariables。 我如何解决这个问题?

你正在使用一种不同于你的身体分析器支持的编码。

您在multipart/form-data使用多部分编码( multipart/form-data ),但您的服务器需要JSON( application/json )或URL编码数据( application/x-www-form-urlencoded )。

除非需要上传文件(需要多部分编码),否则应该使用URL编码(如果未指定enctype则这是错误的)。 然后使用bodyParser.urlencoded()parsing器正确parsingbodyParser.urlencoded()

 <form method="post" enctype="application/x-www-form-urlencoded" action="/ins"> <!-- ^--- note the enctype --> <p> <strong>INSERISCI LA TUA CAGATA<br></strong> <br> <p>Username&nbsp</p> <input type="text" name="username" required> <br> <br> <p>Password &nbsp</p> <input type="password" name="password" required> <br> <br> <br> <input type="submit" class="mainBtn" id="submit" value="Inserisci Cagata"> </p> </form> 

如果您确实需要多部分编码(例如,如果您正在上传文件),则可以使用多部分主体parsing器(如multiparty或busboy )。 请注意,因为multipart是一个复杂的编码,所以你不会直接得到req.body ,但是你必须自己做一些parsing,这就是为什么你应该避免多部分编码,除非你真的需要它。