2017-06-14 94 views
0

我看過所有類似的問題,沒有人爲我工作。我有一個節點js應用程序,我無法使用body-parser從表單輸入文本。Node js post - 無法讀取undefined的屬性?

我index.ejs:

  <form id="demo-2" method = "POST" action="/search"> 
<input type="search" name = "searcher" placeholder="Search"> 
        </form> 

Index.js:

var cool = require('cool-ascii-faces'); 
var express = require('express'); 

var app = express(); 
var pg = require('pg'); 
var bodyParser = require('body-parser'); 
var env = require('node-env-file'); 

app.set('port', (process.env.PORT || 5000)); 
app.use(express.static(__dirname + '/views/')); 

// views is directory for all template files 
app.set('views', __dirname + '/views'); 
app.set('view engine', 'ejs'); 

//app.use(express.bodyParser()); 


//DIFFERENT APPS - tells them what to do 

app.post('/search', function(request, response) { 
    //var username = req.body; 

    console.log("posted something"+ request.body.searcher); 
    response.end("something was posted: "+ request.body.searcher); 
}); 

app.get('/search', function(request, response) { 
    response.send("skylarr"); 

}); 

而且,儘管使用輸入的名字搜索,我得到錯誤:TypeError: Cannot read property 'searcher' of undefined

這裏有什麼問題?

+1

你註釋掉了body-parser中間件。爲什麼?取消評論,然後嘗試。 – Khurram

+0

這造成了有關中間件的錯誤,不會讓應用程序運行。 – skyguy

回答

1

body-parser不是快遞的一部分。使用npm install body-parser --save單獨安裝,然後將其用作中間件。檢查你註釋後的代碼express.bodyParser()中間件

var cool = require('cool-ascii-faces'); 
var express = require('express'); 

var app = express(); 
var pg = require('pg'); 
var bodyParser = require('body-parser'); 
var env = require('node-env-file'); 

app.set('port', (process.env.PORT || 5000)); 
app.use(express.static(__dirname + '/views/')); 

// views is directory for all template files 
app.set('views', __dirname + '/views'); 
app.set('view engine', 'ejs'); 

//app.use(express.bodyParser()); 

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


//DIFFERENT APPS - tells them what to do 

app.post('/search', function(request, response) { 
    //var username = req.body; 

    console.log("posted something"+ request.body.searcher); 
    response.end("something was posted: "+ request.body.searcher); 
}); 

app.get('/search', function(request, response) { 
    response.send("skylarr"); 

}); 
+0

@skyguy您在上面的評論中告訴您,如果您對'bodyParser'發表評論,表示會產生有關中間件的錯誤。我想告訴你'bodyParser'不是快遞的一部分。單獨安裝和使用。 – Khurram

+0

我現在明白了。謝謝你們 – skyguy

1

標準Node.JS HTTP請求上沒有body屬性。該密鑰已由bodyParser中間件修補。

您可以添加bodyParser中間件,或者(如果由於某種原因不想分析正文)使用查詢或URL參數來傳遞searcher

+0

對不起,我是新手。你能舉出這2個選項的例子嗎? – skyguy

1

您缺少身體分析器。你需要告訴express使用body parser作爲中間件。

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

在app.post()的上面添加這兩行。