2015-07-12 43 views
1

對不起,如果這是一個補救問題,或者一個明顯的錯誤,但這是我的第一個Node項目。通過表單數據無法在Express/Node.js中工作

埃森卡利我需要做的是獲得一行文本,用戶將輸入到前端的表單中。不幸的是,不管我做了什麼結果日誌'未定義'。我很茫然。我會後的全部代碼的下方,但給我的麻煩的部分是:

app.get('/test', function(req, res){ 
    res.render('test'); 
}); 

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

的「/測試」路線只是暫時的測試得到迴應表格(如果由於某種原因,這不是明顯)。

我完整的HTML文件看起來像這樣:

<!DOCTYPE HTML> 
<head></head> 
<body> 
    <form id="myform" action="/test" method="post" enctype="application/x-www-form-urlencoded"> 
     <input type="text" name="name" id="mytext" /> 
     <input type="submit" id="mysubmit" /> 
    </form> 
</body> 

任何想法/幫助將不勝感激。

以下是完整的app.js文件

var app = require('express')(); 
var http = require('http').Server(app); 
var exphbs = require('express-handlebars'); 
var twitter = require('./twitter.js'); 
var hue = require("./hue_control.js"); 

//Variable that control Twitter Calls 
var api = 'statuses/filter'; 
var params = {slug:'test', owner_screen_name: 'REDACTED', skip_status: true}; 
var values = {}; 

app.engine('handlebars', exphbs({defaultLayout: 'main'})); 
app.set('view engine', 'handlebars'); 

hue.activate(); 
twitter.tweetStream(api, params, values); 

app.get('/test', function(req, res){ 
    res.render('test'); 
}); 

app.post('/test',function(req,res){ 
    console.log(req.body); //you will get your data in this as object. 
    console.log(req.is('json')); 
}); 

app.get('/', function(req, res){ 
    res.render('tweets'); 
}); 

app.get('/tweets', function(req, res){ 
    res.render('home', { 
     profileImg: values.profileImg, 
     userName: values.userName, 
     screenName: values.screenName, 
     text: values.text, 
     timeStamp: values.timeStamp,   
     tweetScore: values.tweetScore 
    }); 
}); 



//app.get('/tweets', function(req, res) 

http.listen(3000, function(){ 
    console.log('listening on *:3000'); 
}); 

回答

3

我認爲你缺少你Express應用程序的bodyParser中間件這就是爲什麼req.body是不確定的。

如果使用快速3.x中,只需使用以下行。 BodyParser常來與以前的版本捆綁快遞4.0

app.use(express.bodyParser()); 

如果您正在使用Express 4.x版,您將需要要求的體解析器模塊明確

var bodyParser = require('body-parser'); 

,然後用它你的應用程序

app.use(bodyParser()); 

其餘的代碼似乎很好。

+0

由於一噸。問題現在解決了。真的很感謝幫助。乾杯。 –

+0

很高興它的工作。歡迎:) – nalinc

1

您需要使用body-parser

粗略地說,這是你所需要的:

var app = require('express')(); 
var http = require('http').Server(app); 
... 
var bodyParser = require('body-parser') 

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