2014-04-24 67 views
0

我一直在試圖用POST方法獲取表單中的數據,但我沒有收到任何信息,我一直在讀一本書來了解expressjs ..這是我的形式:沒有收到帖子形式的數據

<form method="post"> 
    <div class="form-group"> 
     <label for="usernameInput" class="col-md-2">Username</label> 
     <div class="col-md-12"> 
      <input type="text" class="form-control" id="usernameInput" name="username" placeholder="Enter username"> 
     </div> 
    </div> 

    <div class="form-group"> 
     <label for="passwordInput" class="col-md-2">Password</label> 
     <div class="col-md-12"> 
      <input type="password" class="form-control" id="passwordInput" name="password" placeholder="Enter password"> 
     </div> 
    </div> 

    <div class="form-group"> 
     <div class="col-sm-offset-1 col-sm-11"> 
      <div class="checkbox"> 
       <label> 
        <input type="checkbox"> Remember me 
       </label> 
      </div> 
     </div> 
    </div> 

    <button type="submit" class="btn btn-default">Log in</button> 
</form> 

這是我的節點代碼。

/* 
Chat application for @node.js 
express version. 
*/ 

//Load modules. 
var express = require('express'), 
    http = require('http'), 
    socket = require('socket.io'), 
    swig = require('swig'), 
    fs = require('fs'); 

//Load config. 
console.log('Loading configuration.'); 
var config = fs.readFileSync('config.json'); 
var config = JSON.parse(config); 
var port = config.port; 
var views = config.views; 
console.log('Configuration loaded.'); 

//Initiate express module in app. 
var app = express(); 


//Global vars 
var Title = "Node.js Chat"; 
var result = ''; 


app.engine('html', swig.renderFile); 

//Set view engine. 
app.set('view engine', 'html'); 

//Set the directory for views. 
app.set('views', __dirname + '/views'); 

swig.setDefaults(
{ 
    cache: false 
}); 

app.get('/', function(request, response) 
{ 
    console.log('GET OK'); 
    response.render('index', 
    { 
     'Title': Title, 
     'result': result, 
    }); 
}); 

app.post('/', function(request, response) 
{ 
    console.log('POST OK'); 
    console.log(request.body); 

    response.render('index', 
    { 
     'Title': Title, 
     'result': 'Post detected.', 
    }); 
}); 

//logger. 
app.use(function(request, response, next) 
{ 
    console.log('%s %s', request.method, request.url); 

    var file = request.url.slice(1 + request.url.indexOf('/')); 

    app.get(request.url, function(request, response) 
    { 
     response.render(file, 
     { 
      //Var to be named in the render : value; 
      'Title': Title, 
      'result': result, 
     }); 
    }); 

    next(); 
}); 


//Set directory for static files (css, js, img) 
app.use(express.static(__dirname + '/public')); 

//Run the app. 
http.createServer(app).listen(port, function() 
{ 
    console.log('Server listening to ' + port); 
}); 

我request.body得到「不確定」,這我不知道爲什麼我得到這個錯誤,我已經與其他方法,如request.param,或request.query嘗試過,但他們什麼也得不到,我「VE確信檢測後和它爲什麼它發送一個真實被發現的消息,但我想在表單中的數據..

回答

1

您需要現在已經分開body-parser middleware。運行npm install body-parser或將body-parser添加到您的package.json和npm install它。

var bodyParser = require('body-parser');添加到您的模塊加載,然後在實例化您的app後,添加中間件app.use(bodyParser());。這將填寫表格的req.body

+0

如果不安裝其他模塊,沒有辦法可以做到這一點? – nosthertus

+0

不是這種形式('req.body')。 Express將這些模塊部分從其自己的模塊中取出,以便更容易地更新/包含/排除它們。 – max

+0

好吧,我會記住,我必須安裝一個新的模塊發佈..謝謝 – nosthertus

0

添加在app.js:

app.use(express.bodyParser()); 

由於評論指出,這取決於快遞版本。

它與3.x一起使用,如上所述。

對於4.0,您必須手動包含以前包含的這些框架。請參閱從視覺媒體(概述選項卡)注:

https://github.com/visionmedia/express/wiki/Migrating-from-3.x-to-4.x

這些不列入允許獨立更新

+1

這已被[棄用](https://github.com/visionmedia/express/wiki/Migrating-from-3.x-to-4.x#overview)。 Express不再包含'bodyParser'中間件。 – max

+0

在4.0是的,我不知道OP使用什麼,因爲它不工作,我假設3.x.感謝澄清。 – Biba

+0

還應該注意''body-parser''不包含多部分表單處理。爲此,您將需要一個單獨的模塊來處理這些類型的請求。 – mscdex