2017-03-16 39 views
1

我有這樣的代碼JS:Req.body = {}後請求後

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> 

當我去的網頁,在車臺秀「{ }「,我沒有訪問POST變量。 我該如何解決問題?

回答

3

您使用的編碼方式不同於您的任何一個身體解析器支持的編碼。

您在表單中使用了多部分編碼(multipart/form-data),但您的服務器期待JSON(application/json)或URL編碼數據(application/x-www-form-urlencoded)。

除非您需要上傳文件(需要多部分編碼),否則您應該使用URL編碼(如果未指定enctype,則爲默認值)。然後身體會與bodyParser.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> 

如果需要多編碼(例如,如果您要上傳的文件),可以使用多體解析器(如如multipartybusboy)。請注意,由於多部分是一種複雜的編碼,您不會直接得到req.body,但您必須自己做一些解析,這就是爲什麼您應該避免多部分編碼,除非您真的需要它。