2014-12-01 144 views
2

我不明白爲什麼req.body是未定義的。它總是訪問node.js server'/ formstuff'中的函數,但req.body是未定義的。Node.js,express,html form req.body is undefined

當我看到它發佈到cmd的結果時,我在任何地方都看不到我的查詢。事實上res.query和res.params是空的。

任何幫助,將不勝感激,謝謝。

快遞:

var express = require('express'), 
app = express(); 
var fs = require('fs'); 
var Promise = require('promise'); 



// Handle Get Request 
app.get('/', function(req, res){ 
// get stuff from request 
var index; 

fs.readFile('./form.html', function (err, data) { 
if (err) { 
    throw err; 
} 
    index = data; 

    res.setHeader("Content-Type", "text/html"); 
    res.send(index); 

}); 

}); 


app.post('/formstuff', function(req, res){ 
    console.log(req.body); 

    res.send(); 
}); 

HTML:

<html> 
<head> 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
<style type = "text/css"> 

body 
{ 
    margin:0; 
} 
#head 
{ 
    width:100%; 
    color:#FAFAFA; 
    height:170px; 
    text-shadow: 2px 2px 0px rgba(150, 150, 150, 1); 
    background: #39d800; /* Old browsers */ 
    background: -moz-linear-gradient(top, #39d800 0%, #00a008 100%); /* FF3.6+ */ 
    background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#39d800), color-stop(100%,#00a008)); /* Chrome,Safari4+ */ 
    background: -webkit-linear-gradient(top, #39d800 0%,#00a008 100%); /* Chrome10+,Safari5.1+ */ 
    background: -o-linear-gradient(top, #39d800 0%,#00a008 100%); /* Opera 11.10+ */ 
     background: -ms-linear-gradient(top, #39d800 0%,#00a008 100%); /* IE10+ */ 
    background: linear-gradient(to bottom, #39d800 0%,#00a008 100%); /* W3C */ 
    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#39d800', endColorstr='#00a008',GradientType=0); /* IE6-9 */ 
    font-family: Brush Script MT; 
    font-weight:bold; 
    font-size:8.5em; 
    text-align:center; 
} 

form div 
{ 
    padding:0.8%; 
} 
fieldset 
{ 
    font-size: 2em; 
    position:relative; 
} 
input 
{ 
    width: 150px; 
    height: 50px; 
    font-size: 1.2em; 
    clear:both; 
} 
</style> 
</head> 
<body> 

<div id = "head">Notifye</div><br> 

<br> 

<fieldset> 
    <legend>Search</legend> 

     <form name = "form" method = "post" action = "http://127.0.0.1:3000/formstuff"> 

     <input type="text" required = "required" name = "tag" placeholder = "lolcats"> 
     <div><input type = "submit" name = "submit" value = "Submit" id = "sub"></div> 

    </form> 

</fieldset> 

</body> 

回答

2

你錯過體解析中間件。

如果您沒有上傳文件,您可以只需npm install body-parser,然後在您的任何路線之前添加app.use(require('body-parser').urlencoded());

+0

安裝之後,它會引發錯誤,指出它無法找到模塊的「body-parser」。我檢查了它,並且在我安裝它之後它確實存在於節點模塊文件夾中。 – 2014-12-01 21:46:18

+0

適用於各種版本的Express(例如3.x以上)。確保你在這裏找到的例子如下:https://github.com/expressjs/body-parser – martenc 2014-12-01 22:04:55

0

你需要更多的軟件包。我建議:

var connect =require('connect'); // 
var multer  =require('multer'); // This is used when multipart/form-data are required 
app.use(connect.json()); // for json 
app.use(connect.urlencoded()); // for application/x-www-form-urlencoded 
app.use(multer({ dest: './uploads/'}));// for multipart/form-data 

這是最好body-parser作爲解釋here這是不是安全的。請參閱connect docsmulter docs

+0

作爲不使用'body-parser'的理由不再有效。該鏈接描述了與Express捆綁在一起的Express ** 3 **'bodyParser'中間件,*這兩個* urlencoded *和* multipart。 Express ** 4 **獨立的'body-parser'模塊不會執行多部分,只有urlencoded和JSON。 – mscdex 2014-12-01 23:23:51